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