--- /dev/null
+<?php
+
+namespace Drupal\Core\EventSubscriber;
+
+use Drupal\Core\Render\HtmlResponse;
+use Drupal\Core\Render\AttachmentsResponseProcessorInterface;
+use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
+use Symfony\Component\HttpKernel\KernelEvents;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Response subscriber to handle HTML responses.
+ */
+class HtmlResponseSubscriber implements EventSubscriberInterface {
+
+ /**
+ * The HTML response attachments processor service.
+ *
+ * @var \Drupal\Core\Render\AttachmentsResponseProcessorInterface
+ */
+ protected $htmlResponseAttachmentsProcessor;
+
+ /**
+ * Constructs a HtmlResponseSubscriber object.
+ *
+ * @param \Drupal\Core\Render\AttachmentsResponseProcessorInterface $html_response_attachments_processor
+ * The HTML response attachments processor service.
+ */
+ public function __construct(AttachmentsResponseProcessorInterface $html_response_attachments_processor) {
+ $this->htmlResponseAttachmentsProcessor = $html_response_attachments_processor;
+ }
+
+ /**
+ * Processes attachments for HtmlResponse responses.
+ *
+ * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event
+ * The event to process.
+ */
+ public function onRespond(FilterResponseEvent $event) {
+ $response = $event->getResponse();
+ if (!$response instanceof HtmlResponse) {
+ return;
+ }
+
+ $event->setResponse($this->htmlResponseAttachmentsProcessor->processAttachments($response));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getSubscribedEvents() {
+ $events[KernelEvents::RESPONSE][] = ['onRespond'];
+ return $events;
+ }
+
+}