From 44f56c2c1b8761e514c784a8ea6977c91047d230 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Fri, 18 Apr 2025 14:07:47 +0200 Subject: [PATCH] Issue #3227637 by larowlan, acbramley, daffie, amber himes matz, yogeshmpawar, fubarhouse, chetanbharambe, jibran, catch, kristen pol, alexpott: NodeController::revisionOverview is uncacheable --- .../node/src/Controller/NodeController.php | 3 ++- .../tests/src/Functional/NodeRevisionsUiTest.php | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/core/modules/node/src/Controller/NodeController.php b/core/modules/node/src/Controller/NodeController.php index 87c9586daee0..e860d0c1d2a0 100644 --- a/core/modules/node/src/Controller/NodeController.php +++ b/core/modules/node/src/Controller/NodeController.php @@ -3,6 +3,7 @@ namespace Drupal\node\Controller; use Drupal\Component\Utility\Xss; +use Drupal\Core\Cache\CacheableMetadata; use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Datetime\DateFormatterInterface; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; @@ -199,7 +200,7 @@ public function revisionOverview(NodeInterface $node) { ], ]; // @todo Simplify once https://www.drupal.org/node/2334319 lands. - $this->renderer->addCacheableDependency($column['data'], $username); + $this->renderer->addCacheableDependency($column['data'], CacheableMetadata::createFromRenderArray($username)); $row[] = $column; if ($is_current_revision) { diff --git a/core/modules/node/tests/src/Functional/NodeRevisionsUiTest.php b/core/modules/node/tests/src/Functional/NodeRevisionsUiTest.php index 88fe3e34e3ed..201d4b6c7d25 100644 --- a/core/modules/node/tests/src/Functional/NodeRevisionsUiTest.php +++ b/core/modules/node/tests/src/Functional/NodeRevisionsUiTest.php @@ -215,4 +215,20 @@ public function testNodeDuplicateRevisionsTab(): void { $this->assertSession()->elementsCount('xpath', $xpath, 1); } + /** + * Tests the node revisions page is cacheable by dynamic page cache. + */ + public function testNodeRevisionsCacheability(): void { + $this->drupalLogin($this->editor); + $node = $this->drupalCreateNode(); + // Admin paths are always uncacheable by dynamic page cache, swap node + // to non admin theme to test cacheability. + $this->config('node.settings')->set('use_admin_theme', FALSE)->save(); + \Drupal::service('router.builder')->rebuild(); + $this->drupalGet($node->toUrl('version-history')); + $this->assertSession()->responseHeaderEquals('X-Drupal-Dynamic-Cache', 'MISS'); + $this->drupalGet($node->toUrl('version-history')); + $this->assertSession()->responseHeaderEquals('X-Drupal-Dynamic-Cache', 'HIT'); + } + } -- GitLab