From d1f528277c4f8f5cf986d32a1c637b2a78715ed8 Mon Sep 17 00:00:00 2001 From: Chi Date: Wed, 16 Dec 2020 04:04:50 +0000 Subject: [PATCH] Issue #3173946 by Charlie ChX Negyesi, Chi: drupal_region() overcaches empty --- src/View/RegionViewBuilder.php | 7 +++++-- tests/src/Kernel/RegionViewBuilderTest.php | 10 +++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/View/RegionViewBuilder.php b/src/View/RegionViewBuilder.php index 0c0c5ad..78edb8e 100644 --- a/src/View/RegionViewBuilder.php +++ b/src/View/RegionViewBuilder.php @@ -81,7 +81,10 @@ class RegionViewBuilder { $build = []; - $cache_metadata = new CacheableMetadata(); + $entity_type = $this->entityTypeManager->getDefinition('block'); + $cache_metadata = (new CacheableMetadata()) + ->addCacheTags($entity_type->getListCacheTags()) + ->addCacheContexts($entity_type->getListCacheContexts()); /** @var \Drupal\block\BlockInterface[] $blocks */ foreach ($blocks as $id => $block) { @@ -102,8 +105,8 @@ class RegionViewBuilder { if ($build) { $build['#region'] = $region; $build['#theme_wrappers'] = ['region']; - $cache_metadata->applyTo($build); } + $cache_metadata->applyTo($build); return $build; } diff --git a/tests/src/Kernel/RegionViewBuilderTest.php b/tests/src/Kernel/RegionViewBuilderTest.php index 1c8f5e8..a0d4ff6 100644 --- a/tests/src/Kernel/RegionViewBuilderTest.php +++ b/tests/src/Kernel/RegionViewBuilderTest.php @@ -63,7 +63,14 @@ final class RegionViewBuilderTest extends KernelTestBase { $build = $view_builder->build('sidebar_first'); // The build should be empty because 'stable' is not a default theme. - self::assertSame([], $build); + $expected_build = [ + '#cache' => [ + 'contexts' => [], + 'tags' => ['config:block_list'], + 'max-age' => Cache::PERMANENT, + ], + ]; + self::assertSame($expected_build, $build); // Specify the theme name explicitly. $build = $view_builder->build('sidebar_first', 'stable'); @@ -103,6 +110,7 @@ final class RegionViewBuilderTest extends KernelTestBase { 'contexts' => ['user'], 'tags' => [ 'config:block.block.public_block', + 'config:block_list', 'tag_for_private_block', 'tag_for_public_block', ],