Loading 3078282-service_worker_caches_admin_toolbar_and_contextual_links.patch 0 → 100644 +105 −0 Original line number Diff line number Diff line diff --git a/pwa.module b/pwa.module index 4fcfab6..74b7765 100644 --- a/pwa.module +++ b/pwa.module @@ -5,6 +5,7 @@ * PWA hooks. */ +use Drupal\Core\Session\AccountInterface; use Drupal\Core\Url; use Drupal\pwa\Controller\PWAController; @@ -73,3 +74,10 @@ function pwa_str_to_list($string) { $list = array_map('trim', $list); return array_filter($list, 'strlen'); } + +/** + * Implements hook_user_login(). + */ +function pwa_user_login(AccountInterface $account) { + \Drupal::service('session')->set('pwa_reset', TRUE); +} diff --git a/pwa.services.yml b/pwa.services.yml index 385ec88..e2ce1f1 100644 --- a/pwa.services.yml +++ b/pwa.services.yml @@ -5,3 +5,7 @@ services: - '@config.factory' - '@language_manager' - '@theme.manager' + pwa.response_subscriber: + class: Drupal\pwa\EventSubscriber\ResponseSubscriber + tags: + - { name: event_subscriber } diff --git a/src/EventSubscriber/ResponseSubscriber.php b/src/EventSubscriber/ResponseSubscriber.php new file mode 100644 index 0000000..4fe5457 --- /dev/null +++ b/src/EventSubscriber/ResponseSubscriber.php @@ -0,0 +1,64 @@ +<?php + +namespace Drupal\pwa\EventSubscriber; + +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpKernel\Event\FilterResponseEvent; +use Symfony\Component\HttpKernel\KernelEvents; + +/** + * Respond to event processes. + */ +class ResponseSubscriber implements EventSubscriberInterface { + + /** + * Additional headers to set on user change. + * + * @var array + */ + const HEADERS = [ + 'Clear-Site-Data' => '"storage"', + ]; + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + return [ + KernelEvents::RESPONSE => [ + ['processResponse', 40], + ], + ]; + } + + /** + * Clear serviceworker cache on user change. + * + * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event + * The event to process. + * + * @see pwa_user_login() + */ + public function processResponse(FilterResponseEvent $event) { + $response = $event->getResponse(); + + if ($event->getRequest()->get('_route') === 'user.logout') { + $response->headers->add(static::HEADERS); + return; + } + + if (stripos($response->headers->get('Content-Type'), 'text/html') === FALSE) { + return; + } + + $session = $event->getRequest()->getSession(); + + if ($session && $session->get('pwa_reset', FALSE)) { + $response->headers->add(static::HEADERS); + + // Only once. + $session->remove('pwa_reset'); + } + } + +} pwa.module +8 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ * PWA hooks. */ use Drupal\Core\Session\AccountInterface; use Drupal\Core\Url; use Drupal\pwa\Controller\PWAController; Loading Loading @@ -73,3 +74,10 @@ function pwa_str_to_list($string) { $list = array_map('trim', $list); return array_filter($list, 'strlen'); } /** * Implements hook_user_login(). */ function pwa_user_login(AccountInterface $account) { \Drupal::service('session')->set('pwa_reset', TRUE); } pwa.services.yml +4 −0 Original line number Diff line number Diff line Loading @@ -5,3 +5,7 @@ services: - '@config.factory' - '@language_manager' - '@theme.manager' pwa.response_subscriber: class: Drupal\pwa\EventSubscriber\ResponseSubscriber tags: - { name: event_subscriber } src/EventSubscriber/ResponseSubscriber.php 0 → 100644 +64 −0 Original line number Diff line number Diff line <?php namespace Drupal\pwa\EventSubscriber; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; /** * Respond to event processes. */ class ResponseSubscriber implements EventSubscriberInterface { /** * Additional headers to set on user change. * * @var array */ const HEADERS = [ 'Clear-Site-Data' => '"storage"', ]; /** * {@inheritdoc} */ public static function getSubscribedEvents() { return [ KernelEvents::RESPONSE => [ ['processResponse', 40], ], ]; } /** * Clear serviceworker cache on user change. * * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event * The event to process. * * @see pwa_user_login() */ public function processResponse(FilterResponseEvent $event) { $response = $event->getResponse(); if ($event->getRequest()->get('_route') === 'user.logout') { $response->headers->add(static::HEADERS); return; } if (stripos($response->headers->get('Content-Type'), 'text/html') === FALSE) { return; } $session = $event->getRequest()->getSession(); if ($session && $session->get('pwa_reset', FALSE)) { $response->headers->add(static::HEADERS); // Only once. $session->remove('pwa_reset'); } } } Loading
3078282-service_worker_caches_admin_toolbar_and_contextual_links.patch 0 → 100644 +105 −0 Original line number Diff line number Diff line diff --git a/pwa.module b/pwa.module index 4fcfab6..74b7765 100644 --- a/pwa.module +++ b/pwa.module @@ -5,6 +5,7 @@ * PWA hooks. */ +use Drupal\Core\Session\AccountInterface; use Drupal\Core\Url; use Drupal\pwa\Controller\PWAController; @@ -73,3 +74,10 @@ function pwa_str_to_list($string) { $list = array_map('trim', $list); return array_filter($list, 'strlen'); } + +/** + * Implements hook_user_login(). + */ +function pwa_user_login(AccountInterface $account) { + \Drupal::service('session')->set('pwa_reset', TRUE); +} diff --git a/pwa.services.yml b/pwa.services.yml index 385ec88..e2ce1f1 100644 --- a/pwa.services.yml +++ b/pwa.services.yml @@ -5,3 +5,7 @@ services: - '@config.factory' - '@language_manager' - '@theme.manager' + pwa.response_subscriber: + class: Drupal\pwa\EventSubscriber\ResponseSubscriber + tags: + - { name: event_subscriber } diff --git a/src/EventSubscriber/ResponseSubscriber.php b/src/EventSubscriber/ResponseSubscriber.php new file mode 100644 index 0000000..4fe5457 --- /dev/null +++ b/src/EventSubscriber/ResponseSubscriber.php @@ -0,0 +1,64 @@ +<?php + +namespace Drupal\pwa\EventSubscriber; + +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpKernel\Event\FilterResponseEvent; +use Symfony\Component\HttpKernel\KernelEvents; + +/** + * Respond to event processes. + */ +class ResponseSubscriber implements EventSubscriberInterface { + + /** + * Additional headers to set on user change. + * + * @var array + */ + const HEADERS = [ + 'Clear-Site-Data' => '"storage"', + ]; + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + return [ + KernelEvents::RESPONSE => [ + ['processResponse', 40], + ], + ]; + } + + /** + * Clear serviceworker cache on user change. + * + * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event + * The event to process. + * + * @see pwa_user_login() + */ + public function processResponse(FilterResponseEvent $event) { + $response = $event->getResponse(); + + if ($event->getRequest()->get('_route') === 'user.logout') { + $response->headers->add(static::HEADERS); + return; + } + + if (stripos($response->headers->get('Content-Type'), 'text/html') === FALSE) { + return; + } + + $session = $event->getRequest()->getSession(); + + if ($session && $session->get('pwa_reset', FALSE)) { + $response->headers->add(static::HEADERS); + + // Only once. + $session->remove('pwa_reset'); + } + } + +}
pwa.module +8 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ * PWA hooks. */ use Drupal\Core\Session\AccountInterface; use Drupal\Core\Url; use Drupal\pwa\Controller\PWAController; Loading Loading @@ -73,3 +74,10 @@ function pwa_str_to_list($string) { $list = array_map('trim', $list); return array_filter($list, 'strlen'); } /** * Implements hook_user_login(). */ function pwa_user_login(AccountInterface $account) { \Drupal::service('session')->set('pwa_reset', TRUE); }
pwa.services.yml +4 −0 Original line number Diff line number Diff line Loading @@ -5,3 +5,7 @@ services: - '@config.factory' - '@language_manager' - '@theme.manager' pwa.response_subscriber: class: Drupal\pwa\EventSubscriber\ResponseSubscriber tags: - { name: event_subscriber }
src/EventSubscriber/ResponseSubscriber.php 0 → 100644 +64 −0 Original line number Diff line number Diff line <?php namespace Drupal\pwa\EventSubscriber; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; /** * Respond to event processes. */ class ResponseSubscriber implements EventSubscriberInterface { /** * Additional headers to set on user change. * * @var array */ const HEADERS = [ 'Clear-Site-Data' => '"storage"', ]; /** * {@inheritdoc} */ public static function getSubscribedEvents() { return [ KernelEvents::RESPONSE => [ ['processResponse', 40], ], ]; } /** * Clear serviceworker cache on user change. * * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event * The event to process. * * @see pwa_user_login() */ public function processResponse(FilterResponseEvent $event) { $response = $event->getResponse(); if ($event->getRequest()->get('_route') === 'user.logout') { $response->headers->add(static::HEADERS); return; } if (stripos($response->headers->get('Content-Type'), 'text/html') === FALSE) { return; } $session = $event->getRequest()->getSession(); if ($session && $session->get('pwa_reset', FALSE)) { $response->headers->add(static::HEADERS); // Only once. $session->remove('pwa_reset'); } } }