diff --git a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php index 67ae505..4493612 100644 --- a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php @@ -177,22 +177,18 @@ public function onRespond(FilterResponseEvent $event) { */ protected function updateDrupalCacheHeaders(Response $response, array $cache_tags = [], array $cache_contexts = []) { // X-Drupal-Cache-Tags - if ($cache_tags) { - if ($response->headers->has('X-Drupal-Cache-Tags')) { - $existing_cache_tags = explode(' ', $response->headers->get('X-Drupal-Cache-Tags')); - $cache_tags = Cache::mergeTags($existing_cache_tags, $cache_tags); - } - $response->headers->set('X-Drupal-Cache-Tags', implode(' ', $cache_tags)); + if ($response->headers->has('X-Drupal-Cache-Tags')) { + $existing_cache_tags = explode(' ', $response->headers->get('X-Drupal-Cache-Tags')); + $cache_tags = Cache::mergeTags($existing_cache_tags, $cache_tags); } + $response->headers->set('X-Drupal-Cache-Tags', implode(' ', $cache_tags)); // X-Drupal-Cache-Contexts - if ($cache_contexts) { - if ($response->headers->has('X-Drupal-Cache-Contexts')) { - $existing_cache_contexts = explode(' ', $response->headers->get('X-Drupal-Cache-Contexts')); - $cache_contexts = Cache::mergeContexts($existing_cache_contexts, $cache_contexts); - } - $response->headers->set('X-Drupal-Cache-Contexts', implode(' ', $this->cacheContexts->optimizeTokens($cache_contexts))); + if ($response->headers->has('X-Drupal-Cache-Contexts')) { + $existing_cache_contexts = explode(' ', $response->headers->get('X-Drupal-Cache-Contexts')); + $cache_contexts = Cache::mergeContexts($existing_cache_contexts, $cache_contexts); } + $response->headers->set('X-Drupal-Cache-Contexts', implode(' ', $this->cacheContexts->optimizeTokens($cache_contexts))); } /** diff --git a/core/modules/system/src/Tests/Bootstrap/PageCacheTest.php b/core/modules/system/src/Tests/Bootstrap/PageCacheTest.php index 4256c16..ff417cb 100644 --- a/core/modules/system/src/Tests/Bootstrap/PageCacheTest.php +++ b/core/modules/system/src/Tests/Bootstrap/PageCacheTest.php @@ -68,6 +68,9 @@ function testPageCacheTags() { 'pre_render', 'rendered', 'system_test_cache_tags_page', + // Check that cache tags added as a route option are present. + 'system_test_route_cache_tag_1', + 'system_test_route_cache_tag_2', ); $this->assertIdentical($cache_entry->tags, $expected_tags); diff --git a/core/modules/system/tests/modules/system_test/system_test.routing.yml b/core/modules/system/tests/modules/system_test/system_test.routing.yml index ecb9921..4258afe 100644 --- a/core/modules/system/tests/modules/system_test/system_test.routing.yml +++ b/core/modules/system/tests/modules/system_test/system_test.routing.yml @@ -63,6 +63,10 @@ system_test.cache_tags_page: path: '/system-test/cache_tags_page' defaults: _controller: '\Drupal\system_test\Controller\SystemTestController::system_test_cache_tags_page' + options: + cache_tags: + - system_test_route_cache_tag_1 + - system_test_route_cache_tag_2 requirements: _access: 'TRUE' diff --git a/core/modules/views/src/Tests/Plugin/AccessTest.php b/core/modules/views/src/Tests/Plugin/AccessTest.php index 208e60c..ea11ba6 100644 --- a/core/modules/views/src/Tests/Plugin/AccessTest.php +++ b/core/modules/views/src/Tests/Plugin/AccessTest.php @@ -106,6 +106,7 @@ function testStaticAccessPlugin() { $this->drupalGet('test_access_static'); $this->assertResponse(200); + $this->assertCacheTag($view->storage->getCacheTags()[0]); } }