diff --git a/.vpython3 b/.vpython3
index add35a7..f6edaa8 100644
--- a/.vpython3
+++ b/.vpython3
@@ -189,7 +189,7 @@
 >
 wheel: <
   name: "infra/python/wheels/python-dateutil-py2_py3"
-  version: "version:2.8.1"
+  version: "version:2.9.0"
 >
 
 # Used by WPT importer
@@ -239,7 +239,7 @@
 >
 wheel: <
   name: "infra/python/wheels/google-cloud-core-py3"
-  version: "version:2.3.3"
+  version: "version:2.4.3"
 >
 wheel: <
   name: "infra/python/wheels/grpcio-status-py3"
@@ -398,7 +398,7 @@
 
 wheel: <
   name: "infra/python/wheels/packaging-py3"
-  version: "version:21.3"
+  version: "version:25.0"
 >
 
 wheel: <
@@ -658,7 +658,7 @@
 >
 wheel: <
   name: "infra/python/wheels/google-cloud-bigquery-py3"
-  version: "version:3.23.1"
+  version: "version:3.38.0"
 >
 wheel: <
   name: "infra/python/wheels/google-cloud-bigquery-storage-py3"
diff --git a/DEPS b/DEPS
index 986d8844..b47480f 100644
--- a/DEPS
+++ b/DEPS
@@ -308,19 +308,19 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'src_internal_revision': '62509a008e80f28517d610ec8f9d3750ca81c911',
+  'src_internal_revision': 'd448ebcd4132c53725dfe2c6cde9b49eeda160bf',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'ca906091e1997742fab665d567a448c7639bcac6',
+  'skia_revision': 'f3ddc700abc7e8711f7942af73c22b867dfde432',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '998bb7fdf2099be82eb98522c3170e2039c2c46a',
+  'v8_revision': 'a4e571c9d0bfe4001e9ef4378c5271fb4b1f1ab8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '3a0ebc752488461c12fe63cfd2e067321a1f266f',
+  'angle_revision': 'cf53f379f81a8c1b43ccd8e087c6b848007f21e6',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -332,7 +332,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
-  'boringssl_revision': '9b86817b23dfbf6e0837df8862a4112c51b4ea3b',
+  'boringssl_revision': '61ca3f2493360393f534d9775b0e80fb39fd2153',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Fuchsia sdk
   # and whatever else without interference from each other.
@@ -380,7 +380,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling CrossBench
   # and whatever else without interference from each other.
-  'crossbench_revision': '1572106a98d0970b6ae54e2ac8b1ae00ec9437e4',
+  'crossbench_revision': '6945a4d9f99a39970cd6e10e5794b675cf092fa6',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling CrossBench
   # and whatever else without interference from each other.
@@ -400,7 +400,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': 'e5c11667c31285d64f215bfc2cd4affce30a97e8',
+  'devtools_frontend_revision': '51f0ad70911e7688153c37f590cb12a8f12ec4d0',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -424,7 +424,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': 'e05063e54542a646fd297a3e8d8c9f2faf8685e5',
+  'dawn_revision': '026bc053ee69caf59c9767756415560327cd4169',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -1206,7 +1206,7 @@
       'packages': [
           {
               'package': 'chromium/chrome/android/orderfiles/arm64',
-              'version': 'BsDyDetarDtir9ITmazCnn2bG_CpglAT5gx0mTBbqtgC',
+              'version': '_HNjrH0HC2lMhRhjWdlHUFP5JUc0HgSQeVYzAlx7UAAC',
           },
       ],
       'condition': 'checkout_android and non_git_source',
@@ -1228,7 +1228,7 @@
       'packages': [
           {
               'package': 'chromium/android_webview/tools/orderfiles/arm64',
-              'version': 'z7mQztbjrSoOPIIyLp9BJLHmF9oTUG7Wu4JIgn6QZ5AC',
+              'version': '36-SSV518AbgsZLs9vXAtqfxxx3vX-qt-5C5rRv5XjYC',
           },
       ],
       'condition': 'checkout_android and non_git_source',
@@ -1624,7 +1624,7 @@
 
   'src/clank': {
     'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' +
-    'ca42da3e3a185a97996945b6b404a00823d0183c',
+    'd6c606dacae7862791a9ac6e7abbf2d1b92323fa',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -1724,7 +1724,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': 'FThFnYvPgNHpefOY5LD8ZGjYzMze-wQJ-i_AjF3OcsgC',
+          'version': 'CSVKeMNJxDHY89IxXrbDSEHovzyDC2EzjuYUxgqZipUC',
       },
     ],
     'condition': 'checkout_android and non_git_source',
@@ -2060,7 +2060,7 @@
     Var('chromium_git') + '/chromium/web-tests.git' + '@' + Var('crossbench_web_tests_revision'),
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '565cc4ee354f0c394d0d83301e6658b1fc979c99',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'b8f203014fd4a509eed94dfca84934136f5d26e5',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -2584,7 +2584,7 @@
     Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '652bdb7719f30b52b08e506645a7322ff1b2cc6f',
 
   'src/third_party/openscreen/src':
-    Var('chromium_git') + '/openscreen' + '@' + '3fbbb548aa18f2fb2b5c4453377cafe48f782bcc',
+    Var('chromium_git') + '/openscreen' + '@' + '39fa0ff22414b59df16a6d8f032b2595c73c6d59',
 
   'src/third_party/openxr/src': {
     'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '75c53b6e853dc12c7b3c771edc9c9c841b15faaa',
@@ -2610,7 +2610,7 @@
     Var('pdfium_git') + '/pdfium.git' + '@' +  Var('pdfium_revision'),
 
   'src/third_party/perfetto':
-    Var('chromium_git') + '/external/github.com/google/perfetto.git' + '@' + '10ac9fc0b09895e39f29d6ef444d496c510856d1',
+    Var('chromium_git') + '/external/github.com/google/perfetto.git' + '@' + '60767b0bac8bea553a5cb85a5a79a0a36ee52547',
 
   'src/base/tracing/test/data': {
     'bucket': 'perfetto',
@@ -2929,16 +2929,16 @@
       'dep_type': 'cipd',
   },
 
-  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@14e2627bfd234012a8a4a24f150b84af390d1b3a',
-  'src/third_party/glslang/src': '{chromium_git}/external/github.com/KhronosGroup/glslang@7099c123729e02f81d70559e79ee4360096fdfe5',
+  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@e66c42f2bb26e9c388dd30c6f10eba8d2cb9fd3b',
+  'src/third_party/glslang/src': '{chromium_git}/external/github.com/KhronosGroup/glslang@14be844d5effc487de8c15d0507d65ce3d19c994',
   'src/third_party/spirv-cross/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Cross@b8fcf307f1f347089e3c46eb4451d27f32ebc8d3',
   'src/third_party/spirv-headers/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Headers@b824a462d4256d720bebb40e78b9eb8f78bbb305',
-  'src/third_party/spirv-tools/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Tools@2c1fd8974f5d9c04629fd51bd4468fce5fed104d',
+  'src/third_party/spirv-tools/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Tools@fb7471844504abb16b732dc4fc0837119a32ec24',
   'src/third_party/vulkan-headers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Headers@39c50d7bf094853a1f9a2e8a7e3377d425ae0c6a',
   'src/third_party/vulkan-loader/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Loader@8b5249c247d21edc96cac28d166005038fe8e286',
   'src/third_party/vulkan-tools/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Tools@0a1fb7e8cb346f69862e4f12c1d7b09d23e2f84c',
   'src/third_party/vulkan-utility-libraries/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Utility-Libraries@3249c4eedf225c113c6a341b0dc08d3681716895',
-  'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@9c7428d35816443597f9e66035774ab7c6da2cd6',
+  'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@b1bf1caabfaef4eebc15ee00c6ee952eaeeb12d6',
 
   'src/third_party/vulkan_memory_allocator':
     Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'cb0597213b0fcb999caa9ed08c2f88dc45eb7d50',
@@ -2981,7 +2981,7 @@
     Var('chromium_git') + '/webpagereplay.git' + '@' + Var('webpagereplay_revision'),
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'd3dc33415dba12a7b26bae4b667970468fcb256b',
+    Var('webrtc_git') + '/src.git' + '@' + '59391e5e8ae6c4da9aa464d199d57e4a62a7d961',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -3691,7 +3691,7 @@
 
   'src/components/optimization_guide/internal': {
       'url': Var('chrome_git') + '/chrome/components/optimization_guide.git' + '@' +
-        '41ab339735f8f9a9f8dad87d3d81cfd89ead6212',
+        'b54a9872b4a49c01ed1f93011dfd96ad67803be7',
       'condition': 'checkout_src_internal',
   },
 
@@ -3763,7 +3763,7 @@
 
   'src/ios_internal':  {
       'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' +
-        '239ab09d80330295888bb4697c92aeba6f8b92a1',
+        'f357f16bf16badcca979a7e0165fac286835dd5e',
       'condition': 'checkout_ios and checkout_src_internal',
   },
 
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index c13b0ce..783750d 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -2375,8 +2375,8 @@
     'chrome/android/monochrome/scripts/monochrome_python_tests.pydeps',
     'chrome/test/chromedriver/log_replay/client_replay_unittest.pydeps',
     'chrome/test/chromedriver/test/run_py_tests.pydeps',
+    'chrome/test/media/performance/openscreen_cast_performance_test.pydeps',
     'chrome/test/media/performance/videostack_performance_test.pydeps',
-    'chrome/test/media_router/performance/openscreen_cast_performance_test.pydeps',
     'chromecast/resource_sizes/chromecast_resource_sizes.pydeps',
     'components/cronet/tools/check_combined_proguard_file.pydeps',
     'components/cronet/tools/generate_proguard_file.pydeps',
@@ -3892,45 +3892,6 @@
     return []
 
 
-def CheckForAnonymousVariables(input_api, output_api):
-    """These types are all expected to hold locks while in scope and
-    so should never be anonymous (which causes them to be immediately
-    destroyed)."""
-    they_who_must_be_named = [
-        'base::AutoLock',
-        'base::AutoUnlock',
-        'SkAutoBlitterChoose',
-        'SkAutoCanvasRestore',
-        'SkAutoDescriptor',
-        'SkAutoHDC',
-        'SkAutoMalloc',
-        'SkAutoMaskFreeImage',
-        'SkAutoRasterClipValidate',
-    ]
-    anonymous = r'(%s)\s*[({]' % '|'.join(they_who_must_be_named)
-    # bad: base::AutoLock(lock.get());
-    # not bad: base::AutoLock lock(lock.get());
-    bad_pattern = input_api.re.compile(anonymous)
-    # good: new base::AutoLock(lock.get())
-    good_pattern = input_api.re.compile(r'\bnew\s*' + anonymous)
-    errors = []
-
-    for f in input_api.AffectedFiles():
-        if not f.LocalPath().endswith(('.cc', '.h', '.inl', '.m', '.mm')):
-            continue
-        for linenum, line in f.ChangedContents():
-            if bad_pattern.search(line) and not good_pattern.search(line):
-                errors.append('%s:%d' % (f.LocalPath(), linenum))
-
-    if errors:
-        return [
-            output_api.PresubmitError(
-                'These lines create anonymous variables that need to be named:',
-                items=errors)
-        ]
-    return []
-
-
 def CheckUniquePtrOnUpload(input_api, output_api):
     # Returns whether |template_str| is of the form <T, U...> for some types T
     # and U, or is invalid due to mismatched angle bracket pairs. Assumes that
diff --git a/android_webview/browser/BUILD.gn b/android_webview/browser/BUILD.gn
index fb8dd28..26c9fbc6 100644
--- a/android_webview/browser/BUILD.gn
+++ b/android_webview/browser/BUILD.gn
@@ -175,8 +175,6 @@
     "network_service/net_helpers.h",
     "page_load_metrics/aw_gws_page_load_metrics_observer.cc",
     "page_load_metrics/aw_gws_page_load_metrics_observer.h",
-    "page_load_metrics/aw_page_load_metrics_memory_tracker_factory.cc",
-    "page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h",
     "page_load_metrics/aw_page_load_metrics_provider.cc",
     "page_load_metrics/aw_page_load_metrics_provider.h",
     "page_load_metrics/aw_web_performance_metrics_observer.cc",
diff --git a/android_webview/browser/gfx/overlay_processor_webview.cc b/android_webview/browser/gfx/overlay_processor_webview.cc
index df8daee..1caf320c 100644
--- a/android_webview/browser/gfx/overlay_processor_webview.cc
+++ b/android_webview/browser/gfx/overlay_processor_webview.cc
@@ -994,10 +994,9 @@
       auto* texture_quad = viz::TextureDrawQuad::MaterialCast(quad);
       DCHECK(texture_quad->is_video_frame);
 
-      auto uv_rect = gfx::BoundingRect(texture_quad->uv_top_left,
-                                       texture_quad->uv_bottom_right);
-
       auto new_resource_id = pass.draw_quads().front().remapped_resource_id;
+      auto uv_rect = texture_quad->GetNormalizedTexCoords(
+          resource_provider_->GetResourceBackedSize(new_resource_id));
       if (resource_provider_->IsOverlayCandidate(new_resource_id)) {
         UpdateOverlayResource(frame_sink_id, new_resource_id, uv_rect);
         buffer_updated = true;
diff --git a/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.cc b/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.cc
deleted file mode 100644
index 78d8e80..0000000
--- a/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h"
-
-#include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
-#include "components/page_load_metrics/browser/features.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
-
-namespace android_webview {
-
-page_load_metrics::PageLoadMetricsMemoryTracker*
-AwPageLoadMetricsMemoryTrackerFactory::GetForBrowserContext(
-    content::BrowserContext* context) {
-  return static_cast<page_load_metrics::PageLoadMetricsMemoryTracker*>(
-      GetInstance()->GetServiceForBrowserContext(context, true));
-}
-
-AwPageLoadMetricsMemoryTrackerFactory*
-AwPageLoadMetricsMemoryTrackerFactory::GetInstance() {
-  return base::Singleton<AwPageLoadMetricsMemoryTrackerFactory>::get();
-}
-
-AwPageLoadMetricsMemoryTrackerFactory::AwPageLoadMetricsMemoryTrackerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "PageLoadMetricsMemoryTracker",
-          BrowserContextDependencyManager::GetInstance()) {}
-
-bool AwPageLoadMetricsMemoryTrackerFactory::ServiceIsCreatedWithBrowserContext()
-    const {
-  return base::FeatureList::IsEnabled(
-      page_load_metrics::features::kV8PerFrameMemoryMonitoring);
-}
-
-std::unique_ptr<KeyedService>
-AwPageLoadMetricsMemoryTrackerFactory::BuildServiceInstanceForBrowserContext(
-    content::BrowserContext* context) const {
-  return std::make_unique<page_load_metrics::PageLoadMetricsMemoryTracker>();
-}
-
-content::BrowserContext*
-AwPageLoadMetricsMemoryTrackerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return context;
-}
-
-}  // namespace android_webview
diff --git a/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h b/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h
deleted file mode 100644
index c7d5b689..0000000
--- a/android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef ANDROID_WEBVIEW_BROWSER_PAGE_LOAD_METRICS_AW_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_
-#define ANDROID_WEBVIEW_BROWSER_PAGE_LOAD_METRICS_AW_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_
-
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
-
-namespace page_load_metrics {
-class PageLoadMetricsMemoryTracker;
-}  // namespace page_load_metrics
-
-namespace android_webview {
-
-class AwPageLoadMetricsMemoryTrackerFactory
-    : public BrowserContextKeyedServiceFactory {
- public:
-  static page_load_metrics::PageLoadMetricsMemoryTracker* GetForBrowserContext(
-      content::BrowserContext* context);
-
-  static AwPageLoadMetricsMemoryTrackerFactory* GetInstance();
-
-  AwPageLoadMetricsMemoryTrackerFactory();
-
- private:
-  // BrowserContextKeyedServiceFactory:
-  bool ServiceIsCreatedWithBrowserContext() const override;
-
-  std::unique_ptr<KeyedService> BuildServiceInstanceForBrowserContext(
-      content::BrowserContext* context) const override;
-
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
-};
-
-}  // namespace android_webview
-
-#endif  // ANDROID_WEBVIEW_BROWSER_PAGE_LOAD_METRICS_AW_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_
diff --git a/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc b/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc
index e99bf6b..4d0df33 100644
--- a/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc
+++ b/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc
@@ -5,14 +5,12 @@
 #include "android_webview/browser/page_load_metrics/page_load_metrics_initialize.h"
 
 #include "android_webview/browser/page_load_metrics/aw_gws_page_load_metrics_observer.h"
-#include "android_webview/browser/page_load_metrics/aw_page_load_metrics_memory_tracker_factory.h"
 #include "android_webview/browser/page_load_metrics/service_level_page_load_metrics_observer.h"
 #include "components/page_load_metrics/browser/features.h"
 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
 #include "components/page_load_metrics/browser/observers/abandoned_page_load_metrics_observer.h"
 #include "components/page_load_metrics/browser/observers/third_party_metrics_observer.h"
 #include "components/page_load_metrics/browser/page_load_metrics_embedder_base.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
 #include "components/page_load_metrics/browser/page_load_tracker.h"
 #include "components/page_load_metrics/google/browser/gws_abandoned_page_load_metrics_observer.h"
 
@@ -20,10 +18,6 @@
 class BrowserContext;
 }  // namespace content
 
-namespace page_load_metrics {
-class PageLoadMetricsMemoryTracker;
-}  // namespace page_load_metrics
-
 namespace android_webview {
 
 namespace {
@@ -43,9 +37,6 @@
   bool IsNoStatePrefetch(content::WebContents* web_contents) override;
   bool IsExtensionUrl(const GURL& url) override;
   bool IsNonTabWebUI(const GURL& url) override;
-  page_load_metrics::PageLoadMetricsMemoryTracker*
-  GetMemoryTrackerForBrowserContext(
-      content::BrowserContext* browser_context) override;
 
  protected:
   // page_load_metrics::PageLoadMetricsEmbedderBase:
@@ -89,18 +80,6 @@
   return false;
 }
 
-page_load_metrics::PageLoadMetricsMemoryTracker*
-PageLoadMetricsEmbedder::GetMemoryTrackerForBrowserContext(
-    content::BrowserContext* browser_context) {
-  if (!base::FeatureList::IsEnabled(
-          page_load_metrics::features::kV8PerFrameMemoryMonitoring)) {
-    return nullptr;
-  }
-
-  return AwPageLoadMetricsMemoryTrackerFactory::GetForBrowserContext(
-      browser_context);
-}
-
 }  // namespace
 
 void InitializePageLoadMetricsForWebContents(
diff --git a/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
index 93a4297..343356e 100644
--- a/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/android_webview/test/data/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -7197,15 +7197,23 @@
     attribute @@toStringTag
     getter download
     getter href
+    getter hreflang
     getter interestForElement
+    getter ping
+    getter referrerPolicy
     getter rel
     getter relList
     getter target
+    getter type
     method constructor
     setter download
+    setter hreflang
     setter interestForElement
+    setter ping
+    setter referrerPolicy
     setter rel
     setter relList
+    setter type
 interface SVGAngle
     attribute @@toStringTag
     attribute SVG_ANGLETYPE_DEG
diff --git a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
index 4a57685e..0b5d1ee 100644
--- a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
@@ -2406,7 +2406,6 @@
     getter computedRole
     getter containerTiming
     getter containerTimingIgnore
-    getter containerTimingNesting
     getter currentCSSZoom
     getter currentPatch
     getter elementTiming
@@ -2563,7 +2562,6 @@
     setter className
     setter containerTiming
     setter containerTimingIgnore
-    setter containerTimingNesting
     setter elementTiming
     setter headingOffset
     setter headingReset
diff --git a/base/BUILD.gn b/base/BUILD.gn
index f820c9e..c975369 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -353,6 +353,7 @@
     "logging.cc",
     "logging.h",
     "logging/log_severity.h",
+    "logging/logging_settings.h",
     "macros/concat.h",
     "macros/if.h",
     "macros/is_empty.h",
diff --git a/base/android/linker/ashmem.h b/base/android/linker/ashmem.h
index 09168060..1329f0f 100644
--- a/base/android/linker/ashmem.h
+++ b/base/android/linker/ashmem.h
@@ -38,20 +38,4 @@
 int ashmem_unpin_region(int fd, size_t offset, size_t len);
 int ashmem_get_size_region(int fd);
 
-#ifndef __ASHMEMIOC /* in case someone included <linux/ashmem.h> too */
-
-#define ASHMEM_NAME_LEN 256
-
-#define ASHMEM_NAME_DEF "dev/ashmem"
-
-/* Return values from ASHMEM_PIN: Was the mapping purged while unpinned? */
-#define ASHMEM_NOT_PURGED 0
-#define ASHMEM_WAS_PURGED 1
-
-/* Return values from ASHMEM_UNPIN: Is the mapping now pinned or unpinned? */
-#define ASHMEM_IS_UNPINNED 0
-#define ASHMEM_IS_PINNED 1
-
-#endif /* ! __ASHMEMIOC */
-
 #endif  // BASE_ANDROID_LINKER_ASHMEM_H_
diff --git a/base/files/file_util_unittest.cc b/base/files/file_util_unittest.cc
index e1fac4a..7ae36b81 100644
--- a/base/files/file_util_unittest.cc
+++ b/base/files/file_util_unittest.cc
@@ -5110,8 +5110,7 @@
 TEST_F(FileUtilTest, CopyFileContentsWithSendfileSeqFile) {
   // This test verifies the special case where we have a regular file with zero
   // length that might actually have contents (such as a seq_file).
-  for (auto* const file :
-       {"/proc/meminfo", "/proc/self/cmdline", "/proc/self/auxv"}) {
+  for (auto* const file : {"/proc/meminfo", "/proc/self/cmdline"}) {
     FilePath proc_file_from(file);
     File from(proc_file_from, File::FLAG_OPEN | File::FLAG_READ);
     ASSERT_TRUE(from.IsValid()) << "could not open " << file;
diff --git a/base/fuchsia/fidl_event_handler_unittest.cc b/base/fuchsia/fidl_event_handler_unittest.cc
index da963b5..3501638 100644
--- a/base/fuchsia/fidl_event_handler_unittest.cc
+++ b/base/fuchsia/fidl_event_handler_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/fuchsia/test_component_context_for_process.h"
 #include "base/fuchsia/test_interface_natural_impl.h"
 #include "base/fuchsia/test_log_listener_safe.h"
+#include "base/logging/logging_settings.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_logging_settings.h"
diff --git a/base/fuchsia/fuchsia_logging_unittest.cc b/base/fuchsia/fuchsia_logging_unittest.cc
index fde90b08..9df28c9 100644
--- a/base/fuchsia/fuchsia_logging_unittest.cc
+++ b/base/fuchsia/fuchsia_logging_unittest.cc
@@ -17,6 +17,7 @@
 #include "base/fuchsia/test_component_context_for_process.h"
 #include "base/fuchsia/test_log_listener_safe.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/test/scoped_logging_settings.h"
 #include "base/test/task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/base/i18n/build_utf8_validator_tables.cc b/base/i18n/build_utf8_validator_tables.cc
index b4187200..f03756f 100644
--- a/base/i18n/build_utf8_validator_tables.cc
+++ b/base/i18n/build_utf8_validator_tables.cc
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <array>
-
 // Create a state machine for validating UTF-8. The algorithm in brief:
 // 1. Convert the complete unicode range of code points, except for the
 //    surrogate code points, to an ordered array of sequences of bytes in
@@ -35,6 +33,7 @@
 #include <string.h>
 
 #include <algorithm>
+#include <array>
 #include <map>
 #include <string>
 #include <vector>
@@ -43,6 +42,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/memory/raw_ptr.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/stringprintf.h"
diff --git a/base/logging.cc b/base/logging.cc
index dd46ccc..1a4944f 100644
--- a/base/logging.cc
+++ b/base/logging.cc
@@ -33,6 +33,7 @@
 #include "base/debug/task_trace.h"
 #include "base/functional/callback.h"
 #include "base/immediate_crash.h"
+#include "base/logging/logging_settings.h"
 #include "base/logging/rust_logger.rs.h"
 #include "base/no_destructor.h"
 #include "base/path_service.h"
diff --git a/base/logging.h b/base/logging.h
index 440fa5e..2d72f112 100644
--- a/base/logging.h
+++ b/base/logging.h
@@ -16,7 +16,6 @@
 #include "base/base_export.h"
 #include "base/compiler_specific.h"
 #include "base/dcheck_is_on.h"
-#include "base/files/file_path.h"
 #include "base/functional/callback_forward.h"
 #include "base/logging/log_severity.h"
 #include "base/strings/utf_ostream_operators.h"
@@ -24,8 +23,6 @@
 
 #if BUILDFLAG(IS_CHROMEOS)
 #include <cstdio>
-
-#include "base/memory/raw_ptr.h"
 #endif
 
 #if BUILDFLAG(IS_WIN)
@@ -179,81 +176,8 @@
 
 namespace logging {
 
-// A bitmask of potential logging destinations.
-using LoggingDestination = uint32_t;
-// Specifies where logs will be written. Multiple destinations can be specified
-// with bitwise OR.
-// Unless destination is LOG_NONE, all logs with severity ERROR and above will
-// be written to stderr in addition to the specified destination.
-// LOG_TO_FILE includes logging to externally-provided file handles.
-enum : uint32_t {
-  LOG_NONE = 0,
-  LOG_TO_FILE = 1 << 0,
-  LOG_TO_SYSTEM_DEBUG_LOG = 1 << 1,
-  LOG_TO_STDERR = 1 << 2,
-
-  LOG_TO_ALL = LOG_TO_FILE | LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR,
-
-// On Windows, use a file next to the exe.
-// On POSIX platforms, where it may not even be possible to locate the
-// executable on disk, use stderr.
-// On Fuchsia, use the Fuchsia logging service.
-#if BUILDFLAG(IS_FUCHSIA)
-  LOG_DEFAULT = LOG_TO_SYSTEM_DEBUG_LOG,
-#elif BUILDFLAG(IS_WIN)
-  LOG_DEFAULT = LOG_TO_FILE,
-#elif BUILDFLAG(IS_POSIX)
-  LOG_DEFAULT = LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR,
-#endif
-};
-
-// Indicates that the log file should be locked when being written to.
-// Unless there is only one single-threaded process that is logging to
-// the log file, the file should be locked during writes to make each
-// log output atomic. Other writers will block.
-//
-// All processes writing to the log file must have their locking set for it to
-// work properly. Defaults to LOCK_LOG_FILE.
-enum LogLockingState { LOCK_LOG_FILE, DONT_LOCK_LOG_FILE };
-
-// On startup, should we delete or append to an existing log file (if any)?
-// Defaults to APPEND_TO_OLD_LOG_FILE.
-enum OldFileDeletionState { DELETE_OLD_LOG_FILE, APPEND_TO_OLD_LOG_FILE };
-
-#if BUILDFLAG(IS_CHROMEOS)
-// Defines the log message prefix format to use.
-// LOG_FORMAT_SYSLOG indicates syslog-like message prefixes.
-// LOG_FORMAT_CHROME indicates the normal Chrome format.
-enum class BASE_EXPORT LogFormat { LOG_FORMAT_CHROME, LOG_FORMAT_SYSLOG };
-#endif
-
-struct BASE_EXPORT LoggingSettings {
-  // Equivalent to logging destination enum, but allows for multiple
-  // destinations.
-  uint32_t logging_dest = LOG_DEFAULT;
-
-  // The four settings below have an effect only when LOG_TO_FILE is
-  // set in |logging_dest|.
-  base::FilePath::StringType log_file_path;
-  LogLockingState lock_log = LOCK_LOG_FILE;
-  OldFileDeletionState delete_old = APPEND_TO_OLD_LOG_FILE;
-#if BUILDFLAG(IS_CHROMEOS)
-  // Contains an optional file that logs should be written to. If present,
-  // |log_file_path| will be ignored, and the logging system will take ownership
-  // of the FILE. If there's an error writing to this file, no fallback paths
-  // will be opened.
-  raw_ptr<FILE> log_file = nullptr;
-  // ChromeOS uses the syslog log format by default.
-  LogFormat log_format = LogFormat::LOG_FORMAT_SYSLOG;
-#endif
-#if BUILDFLAG(IS_WIN)
-  // Contains an optional file that logs should be written to. If present,
-  // `log_file_path` will be ignored, and the logging system will take ownership
-  // of the HANDLE. If there's an error writing to this file, no fallback paths
-  // will be opened.
-  HANDLE log_file = nullptr;
-#endif
-};
+// See base/logging/logging_settings.h for additional logging settings.
+struct LoggingSettings;
 
 // Define different names for the BaseInitLoggingImpl() function depending on
 // whether NDEBUG is defined or not so that we'll fail to link if someone tries
diff --git a/base/logging/logging_settings.h b/base/logging/logging_settings.h
new file mode 100644
index 0000000..d902909b
--- /dev/null
+++ b/base/logging/logging_settings.h
@@ -0,0 +1,101 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_LOGGING_LOGGING_SETTINGS_H_
+#define BASE_LOGGING_LOGGING_SETTINGS_H_
+
+#include <stdint.h>
+
+#include "base/files/file_path.h"
+#include "build/build_config.h"
+
+#if BUILDFLAG(IS_CHROMEOS)
+#include "base/memory/raw_ptr.h"
+#endif
+
+#if BUILDFLAG(IS_WIN)
+#include "base/win/windows_types.h"
+#endif
+
+namespace logging {
+
+// A bitmask of potential logging destinations.
+using LoggingDestination = uint32_t;
+// Specifies where logs will be written. Multiple destinations can be specified
+// with bitwise OR.
+// Unless destination is LOG_NONE, all logs with severity ERROR and above will
+// be written to stderr in addition to the specified destination.
+// LOG_TO_FILE includes logging to externally-provided file handles.
+enum : uint32_t {
+  LOG_NONE = 0,
+  LOG_TO_FILE = 1 << 0,
+  LOG_TO_SYSTEM_DEBUG_LOG = 1 << 1,
+  LOG_TO_STDERR = 1 << 2,
+
+  LOG_TO_ALL = LOG_TO_FILE | LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR,
+
+// On Windows, use a file next to the exe.
+// On POSIX platforms, where it may not even be possible to locate the
+// executable on disk, use stderr.
+// On Fuchsia, use the Fuchsia logging service.
+#if BUILDFLAG(IS_FUCHSIA)
+  LOG_DEFAULT = LOG_TO_SYSTEM_DEBUG_LOG,
+#elif BUILDFLAG(IS_WIN)
+  LOG_DEFAULT = LOG_TO_FILE,
+#elif BUILDFLAG(IS_POSIX)
+  LOG_DEFAULT = LOG_TO_SYSTEM_DEBUG_LOG | LOG_TO_STDERR,
+#endif
+};
+
+// Indicates that the log file should be locked when being written to.
+// Unless there is only one single-threaded process that is logging to
+// the log file, the file should be locked during writes to make each
+// log output atomic. Other writers will block.
+//
+// All processes writing to the log file must have their locking set for it to
+// work properly. Defaults to LOCK_LOG_FILE.
+enum LogLockingState { LOCK_LOG_FILE, DONT_LOCK_LOG_FILE };
+
+// On startup, should we delete or append to an existing log file (if any)?
+// Defaults to APPEND_TO_OLD_LOG_FILE.
+enum OldFileDeletionState { DELETE_OLD_LOG_FILE, APPEND_TO_OLD_LOG_FILE };
+
+#if BUILDFLAG(IS_CHROMEOS)
+// Defines the log message prefix format to use.
+// LOG_FORMAT_SYSLOG indicates syslog-like message prefixes.
+// LOG_FORMAT_CHROME indicates the normal Chrome format.
+enum class BASE_EXPORT LogFormat { LOG_FORMAT_CHROME, LOG_FORMAT_SYSLOG };
+#endif
+
+struct BASE_EXPORT LoggingSettings {
+  // Equivalent to logging destination enum, but allows for multiple
+  // destinations.
+  uint32_t logging_dest = LOG_DEFAULT;
+
+  // The four settings below have an effect only when LOG_TO_FILE is
+  // set in |logging_dest|.
+  base::FilePath::StringType log_file_path;
+  LogLockingState lock_log = LOCK_LOG_FILE;
+  OldFileDeletionState delete_old = APPEND_TO_OLD_LOG_FILE;
+#if BUILDFLAG(IS_CHROMEOS)
+  // Contains an optional file that logs should be written to. If present,
+  // |log_file_path| will be ignored, and the logging system will take ownership
+  // of the FILE. If there's an error writing to this file, no fallback paths
+  // will be opened.
+  raw_ptr<FILE> log_file = nullptr;
+  // ChromeOS uses the syslog log format by default.
+  LogFormat log_format = LogFormat::LOG_FORMAT_SYSLOG;
+#endif
+#if BUILDFLAG(IS_WIN)
+  // Contains an optional file that logs should be written to. If present,
+  // `log_file_path` will be ignored, and the logging system will take ownership
+  // of the HANDLE. If there's an error writing to this file, no fallback paths
+  // will be opened.
+  HANDLE log_file = nullptr;
+#endif
+};
+
+}  // namespace logging
+
+#endif  // BASE_LOGGING_LOGGING_SETTINGS_H_
diff --git a/base/logging_unittest.cc b/base/logging_unittest.cc
index 0ee07f1..8ea6588 100644
--- a/base/logging_unittest.cc
+++ b/base/logging_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
+#include "base/logging/logging_settings.h"
 #include "base/no_destructor.h"
 #include "base/process/process.h"
 #include "base/run_loop.h"
diff --git a/base/logging_win.cc b/base/logging_win.cc
index be3f2920..debf48b 100644
--- a/base/logging_win.cc
+++ b/base/logging_win.cc
@@ -11,6 +11,7 @@
 
 #include <initguid.h>
 
+#include "base/logging/logging_settings.h"
 #include "base/memory/singleton.h"
 
 namespace logging {
diff --git a/base/memory/discardable_shared_memory.cc b/base/memory/discardable_shared_memory.cc
index b010c8f..d99f76f 100644
--- a/base/memory/discardable_shared_memory.cc
+++ b/base/memory/discardable_shared_memory.cc
@@ -30,6 +30,8 @@
 #endif
 
 #if BUILDFLAG(IS_ANDROID)
+#include <linux/ashmem.h>
+
 #include "base/android/linker/ashmem.h"
 #endif
 
diff --git a/base/test/scoped_logging_settings.h b/base/test/scoped_logging_settings.h
index 4f2285d..7633e3d8 100644
--- a/base/test/scoped_logging_settings.h
+++ b/base/test/scoped_logging_settings.h
@@ -8,6 +8,7 @@
 #include "base/base_export.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/memory/raw_ptr.h"
 #include "build/build_config.h"
 
diff --git a/base/test/test_suite.cc b/base/test/test_suite.cc
index 5084e1f..ac91b3e1 100644
--- a/base/test/test_suite.cc
+++ b/base/test/test_suite.cc
@@ -32,6 +32,7 @@
 #include "base/i18n/icu_util.h"
 #include "base/i18n/rtl.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/metrics/statistics_recorder.h"
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
index 749662e..3871979 100644
--- a/build/config/BUILDCONFIG.gn
+++ b/build/config/BUILDCONFIG.gn
@@ -56,7 +56,7 @@
     # build for ARM by default, not the host_cpu (which is likely x64).
     # This allows us to not have to specify both target_os and target_cpu
     # on the command line.
-    target_cpu = "arm"
+    target_cpu = "arm64"
   } else {
     target_cpu = host_cpu
   }
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index eb81a83..87e473d 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-30.20251110.103.1
+30.20251118.102.1
diff --git a/cc/layers/nine_patch_layer_impl_unittest.cc b/cc/layers/nine_patch_layer_impl_unittest.cc
index a984a88..9121bd0 100644
--- a/cc/layers/nine_patch_layer_impl_unittest.cc
+++ b/cc/layers/nine_patch_layer_impl_unittest.cc
@@ -25,6 +25,7 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/geometry/rect_conversions.h"
+#include "ui/gfx/geometry/size.h"
 #include "ui/gfx/geometry/transform.h"
 
 namespace cc {
@@ -108,9 +109,7 @@
   for (auto* quad : quads) {
     const viz::TextureDrawQuad* tex_quad =
         viz::TextureDrawQuad::MaterialCast(quad);
-    gfx::RectF tex_rect =
-        gfx::BoundingRect(tex_quad->uv_top_left, tex_quad->uv_bottom_right);
-    tex_rect.Scale(bitmap_size.width(), bitmap_size.height());
+    gfx::RectF tex_rect = tex_quad->GetUnnormalizedTexCoords(bitmap_size);
     tex_remaining.Subtract(Region(ToRoundedIntRect(tex_rect)));
   }
 
@@ -218,9 +217,7 @@
   for (auto* quad : quads) {
     const viz::TextureDrawQuad* tex_quad =
         viz::TextureDrawQuad::MaterialCast(quad);
-    gfx::RectF tex_rect =
-        gfx::BoundingRect(tex_quad->uv_top_left, tex_quad->uv_bottom_right);
-    tex_rect.Scale(bitmap_size.width(), bitmap_size.height());
+    gfx::RectF tex_rect = tex_quad->GetUnnormalizedTexCoords(bitmap_size);
     tex_remaining.Subtract(Region(ToRoundedIntRect(tex_rect)));
   }
 
diff --git a/cc/slim/slim_layer_tree_compositor_frame_unittest.cc b/cc/slim/slim_layer_tree_compositor_frame_unittest.cc
index 7addfdd..2fe5066 100644
--- a/cc/slim/slim_layer_tree_compositor_frame_unittest.cc
+++ b/cc/slim/slim_layer_tree_compositor_frame_unittest.cc
@@ -44,7 +44,9 @@
 #include "ui/gfx/color_space.h"
 #include "ui/gfx/geometry/linear_gradient.h"
 #include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/rect_f.h"
 #include "ui/gfx/geometry/rounded_corners_f.h"
+#include "ui/gfx/geometry/size_f.h"
 #include "ui/gfx/geometry/test/geometry_util.h"
 #include "ui/gfx/geometry/transform.h"
 #include "ui/gfx/gpu_fence_handle.h"
@@ -674,8 +676,9 @@
         viz::TextureDrawQuad::MaterialCast(pass->quad_list.front());
     EXPECT_TRUE(texture_quad->needs_blending);
     EXPECT_NE(viz::kInvalidResourceId, texture_quad->resource_id);
-    EXPECT_EQ(gfx::PointF(0.0f, 0.0f), texture_quad->uv_top_left);
-    EXPECT_EQ(gfx::PointF(1.0f, 1.0f), texture_quad->uv_bottom_right);
+    EXPECT_EQ(gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
+              texture_quad->GetNormalizedTexCoords(
+                  gfx::Size(image_info.width(), image_info.height())));
 
     ASSERT_EQ(frame.resource_list.size(), 1u);
     EXPECT_EQ(frame.resource_list[0].id, texture_quad->resource_id);
@@ -708,8 +711,9 @@
         viz::TextureDrawQuad::MaterialCast(pass->quad_list.front());
     EXPECT_TRUE(texture_quad->needs_blending);
     EXPECT_NE(viz::kInvalidResourceId, texture_quad->resource_id);
-    EXPECT_EQ(gfx::PointF(0.25f, 0.25f), texture_quad->uv_top_left);
-    EXPECT_EQ(gfx::PointF(0.75f, 0.75f), texture_quad->uv_bottom_right);
+    EXPECT_EQ(gfx::RectF(0.25f, 0.25f, 0.5f, 0.5f),
+              texture_quad->GetNormalizedTexCoords(
+                  gfx::Size(image_info.width(), image_info.height())));
 
     ASSERT_EQ(frame.resource_list.size(), 1u);
     EXPECT_EQ(frame.resource_list[0].id, texture_quad->resource_id);
@@ -844,8 +848,12 @@
         viz::TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(i));
     EXPECT_NE(viz::kInvalidResourceId, texture_quad->resource_id);
     EXPECT_TRUE(texture_quad->nearest_neighbor);
-    EXPECT_EQ(expected_uv_top_left[i], texture_quad->uv_top_left);
-    EXPECT_EQ(expected_uv_bottom_right[i], texture_quad->uv_bottom_right);
+    const gfx::RectF expected_tex_coords =
+        gfx::BoundingRect(expected_uv_top_left[i], expected_uv_bottom_right[i]);
+    const gfx::Size image_size =
+        gfx::Size(image_info.width(), image_info.height());
+    EXPECT_EQ(expected_tex_coords,
+              texture_quad->GetNormalizedTexCoords(image_size));
 
     EXPECT_EQ(frame.resource_list[0].id, texture_quad->resource_id);
     EXPECT_EQ(frame_sink_->uploaded_resources().begin()->second.viz_resource_id,
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index ac7d5eb..311a70ea 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -1665,7 +1665,6 @@
   // When we require high res to draw, abort the draw (almost) always. This does
   // not cause the scheduler to do a main frame, instead it will continue to try
   // drawing until we finally complete, so the copy request will not be lost.
-  // TODO(weiliangc): Remove RequiresHighResToDraw. crbug.com/469175
   if (frame->checkerboarded_needs_raster) {
     if (RequiresHighResToDraw()) {
       if (expects_to_draw) {
@@ -4259,7 +4258,6 @@
   // If we just became visible, we have to ensure that we draw high res tiles,
   // to prevent checkerboard flashes.
   if (visible_) {
-    // TODO(crbug.com/40410467): Replace with RequiresHighResToDraw.
     SetRequiresHighResToDraw();
     // Prior CompositorFrame may have been discarded and thus we need to ensure
     // that we submit a new one, even if there are no tiles. Therefore, force a
@@ -4705,7 +4703,6 @@
   // There will not be anything to draw here, so set high res
   // to avoid checkerboards, typically when we are recovering
   // from lost context.
-  // TODO(crbug.com/40410467): Replace with RequiresHighResToDraw.
   SetRequiresHighResToDraw();
 
   // Always allocate a new viz::LocalSurfaceId when we get a new
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index ec9373b5..423b81f 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -10448,15 +10448,18 @@
       gfx::SizeF gutter_texture_size_pixels =
           gfx::ScaleSize(gfx::SizeF(gutter_texture_size_),
                          host_impl_->active_tree()->device_scale_factor());
-      EXPECT_EQ(texture_quad->uv_top_left.x(),
+      const gfx::RectF texture_quad_tex_coords(
+          texture_quad->GetNormalizedTexCoords(
+              gfx::ToRoundedSize(gutter_texture_size_pixels)));
+      EXPECT_EQ(texture_quad_tex_coords.x(),
                 texture_quad->rect.x() / gutter_texture_size_pixels.width());
-      EXPECT_EQ(texture_quad->uv_top_left.y(),
+      EXPECT_EQ(texture_quad_tex_coords.y(),
                 texture_quad->rect.y() / gutter_texture_size_pixels.height());
       EXPECT_EQ(
-          texture_quad->uv_bottom_right.x(),
+          texture_quad_tex_coords.right(),
           texture_quad->rect.right() / gutter_texture_size_pixels.width());
       EXPECT_EQ(
-          texture_quad->uv_bottom_right.y(),
+          texture_quad_tex_coords.bottom(),
           texture_quad->rect.bottom() / gutter_texture_size_pixels.height());
     }
   }
diff --git a/chrome/android/expectations/trichrome_chrome_64_32_bundle.proguard_flags.expected b/chrome/android/expectations/trichrome_chrome_64_32_bundle.proguard_flags.expected
index 3dc82bd..832cc59 100644
--- a/chrome/android/expectations/trichrome_chrome_64_32_bundle.proguard_flags.expected
+++ b/chrome/android/expectations/trichrome_chrome_64_32_bundle.proguard_flags.expected
@@ -450,6 +450,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# We supply these as stubs and will only use them in older Android versions which had a framework
+# implementation. We don't want R8 to complain about them not being there during optimization.
+-dontwarn android.hardware.fingerprint.FingerprintManager.**
+
 # Never inline methods, but allow shrinking and obfuscation.
 -keepclassmembernames,allowobfuscation,allowshrinking
         class androidx.biometric.AuthenticationCallbackProvider$Api* {
diff --git a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupControllerTest.java b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupControllerTest.java
index cd177f4..6f78f6c 100644
--- a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupControllerTest.java
+++ b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupControllerTest.java
@@ -74,7 +74,7 @@
         mModel.get(TABS).addObserver(mMockTabListObserver);
 
         // Calling addTab on the coordinator should make the model propagate that it has a new tab.
-        mCoordinator.getTabSwitchingDelegate().addTab(mTestTab);
+        mCoordinator.getTabSwitchingDelegate().setTabs(new KeyboardAccessoryData.Tab[] {mTestTab});
         verify(mMockTabListObserver).onItemRangeInserted(mModel.get(TABS), 0, 1);
         assertThat(mModel.get(TABS).size(), is(1));
         assertThat(mModel.get(TABS).get(0), is(mTestTab));
@@ -130,9 +130,9 @@
     public void testSetActiveTab() {
         mModel.addObserver(mMockPropertyObserver);
         assertThat(mModel.get(ACTIVE_TAB), is(nullValue()));
-        mCoordinator.getTabSwitchingDelegate().addTab(mTestTab);
+        mCoordinator.getTabSwitchingDelegate().setTabs(new KeyboardAccessoryData.Tab[] {mTestTab});
 
-        // Set the active tab type to 0 which is the recording_type of |mTestTab|.
+        // Set the active tab type to 0 which is the recording_type of `mTestTab`.
         mCoordinator.getTabSwitchingDelegate().setActiveTab(0);
 
         verify(mMockPropertyObserver).onPropertyChanged(mModel, ACTIVE_TAB);
@@ -143,9 +143,9 @@
     public void testSetActiveTab_tabTypeNotFound_throwsException() {
         mModel.addObserver(mMockPropertyObserver);
         assertThat(mModel.get(ACTIVE_TAB), is(nullValue()));
-        mCoordinator.getTabSwitchingDelegate().addTab(mTestTab);
+        mCoordinator.getTabSwitchingDelegate().setTabs(new KeyboardAccessoryData.Tab[] {mTestTab});
 
-        // Set the active tab type to 1 which is different from the recording_type of |mTestTab|.
+        // Set the active tab type to 1 which is different from the recording_type of `mTestTab`.
         mCoordinator.getTabSwitchingDelegate().setActiveTab(1);
     }
 }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorLayoutBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorLayoutBinder.java
index 7bd7f6b..2d3138e9 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorLayoutBinder.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorLayoutBinder.java
@@ -25,40 +25,17 @@
      */
     public static void bind(
             PropertyModel model, TabListEditorLayout view, PropertyKey propertyKey) {
-        if (TabListEditorProperties.IS_VISIBLE == propertyKey) {
-            if (model.get(TabListEditorProperties.IS_VISIBLE)) {
-                view.show();
-            } else {
-                view.hide();
-            }
-        } else if (TabListEditorProperties.TOOLBAR_NAVIGATION_LISTENER == propertyKey) {
-            view.getToolbar()
-                    .setNavigationOnClickListener(
-                            model.get(TabListEditorProperties.TOOLBAR_NAVIGATION_LISTENER));
-        } else if (TabListEditorProperties.PRIMARY_COLOR == propertyKey) {
-            view.setBackgroundColor(model.get(TabListEditorProperties.PRIMARY_COLOR));
-        } else if (TabListEditorProperties.TOOLBAR_BACKGROUND_COLOR == propertyKey) {
-            view.getToolbar()
-                    .setToolbarBackgroundColor(
-                            model.get(TabListEditorProperties.TOOLBAR_BACKGROUND_COLOR));
-        } else if (TabListEditorProperties.TOOLBAR_TEXT_TINT == propertyKey) {
-            view.getToolbar()
-                    .setTextColorStateList(model.get(TabListEditorProperties.TOOLBAR_TEXT_TINT));
-        } else if (TabListEditorProperties.TOOLBAR_BUTTON_TINT == propertyKey) {
-            view.getToolbar().setButtonTint(model.get(TabListEditorProperties.TOOLBAR_BUTTON_TINT));
-        } else if (TabListEditorProperties.TOOLBAR_TITLE == propertyKey) {
-            view.getToolbar().setTitle(model.get(TabListEditorProperties.TOOLBAR_TITLE));
-        } else if (TabListEditorProperties.TOP_MARGIN == propertyKey) {
-            ViewGroup.MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams();
-            layoutParams.topMargin = model.get(TabListEditorProperties.TOP_MARGIN);
-            // Calling setLayoutParams to requestLayout() for margin to take effect.
-            view.setLayoutParams(layoutParams);
-        } else if (TabListEditorProperties.CREATION_MODE == propertyKey) {
+        if (TabListEditorProperties.CREATION_MODE == propertyKey) {
             // Read the mode from the model and pass it to the view's setter.
             TabListEditorActionViewLayout actionViewLayout =
                     view.findViewById(R.id.action_view_layout);
             @CreationMode int creationMode = model.get(TabListEditorProperties.CREATION_MODE);
             actionViewLayout.setCreationMode(creationMode);
+        } else if (propertyKey == TabListEditorProperties.DONE_BUTTON_CLICK_HANDLER) {
+            view.getToolbar()
+                    .getActionViewLayout()
+                    .setDoneButtonOnClickListener(
+                            model.get(TabListEditorProperties.DONE_BUTTON_CLICK_HANDLER));
         } else if (TabListEditorProperties.DONE_BUTTON_VISIBILITY == propertyKey) {
             view.getToolbar()
                     .getActionViewLayout()
@@ -69,11 +46,34 @@
                     .getActionViewLayout()
                     .setIsDoneButtonEnabled(
                             model.get(TabListEditorProperties.IS_DONE_BUTTON_ENABLED));
-        } else if (propertyKey == TabListEditorProperties.DONE_BUTTON_CLICK_HANDLER) {
+        } else if (TabListEditorProperties.IS_VISIBLE == propertyKey) {
+            if (model.get(TabListEditorProperties.IS_VISIBLE)) {
+                view.show();
+            } else {
+                view.hide();
+            }
+        } else if (TabListEditorProperties.PRIMARY_COLOR == propertyKey) {
+            view.setBackgroundColor(model.get(TabListEditorProperties.PRIMARY_COLOR));
+        } else if (TabListEditorProperties.TOOLBAR_BACKGROUND_COLOR == propertyKey) {
             view.getToolbar()
-                    .getActionViewLayout()
-                    .setDoneButtonOnClickListener(
-                            model.get(TabListEditorProperties.DONE_BUTTON_CLICK_HANDLER));
+                    .setToolbarBackgroundColor(
+                            model.get(TabListEditorProperties.TOOLBAR_BACKGROUND_COLOR));
+        } else if (TabListEditorProperties.TOOLBAR_BUTTON_TINT == propertyKey) {
+            view.getToolbar().setButtonTint(model.get(TabListEditorProperties.TOOLBAR_BUTTON_TINT));
+        } else if (TabListEditorProperties.TOOLBAR_NAVIGATION_LISTENER == propertyKey) {
+            view.getToolbar()
+                    .setNavigationOnClickListener(
+                            model.get(TabListEditorProperties.TOOLBAR_NAVIGATION_LISTENER));
+        } else if (TabListEditorProperties.TOOLBAR_TEXT_TINT == propertyKey) {
+            view.getToolbar()
+                    .setTextColorStateList(model.get(TabListEditorProperties.TOOLBAR_TEXT_TINT));
+        } else if (TabListEditorProperties.TOOLBAR_TITLE == propertyKey) {
+            view.getToolbar().setTitle(model.get(TabListEditorProperties.TOOLBAR_TITLE));
+        } else if (TabListEditorProperties.TOP_MARGIN == propertyKey) {
+            ViewGroup.MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams();
+            layoutParams.topMargin = model.get(TabListEditorProperties.TOP_MARGIN);
+            // Calling setLayoutParams to requestLayout() for margin to take effect.
+            view.setLayoutParams(layoutParams);
         }
     }
 }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorProperties.java
index c7bfb43f..010f5fe 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorProperties.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorProperties.java
@@ -14,55 +14,55 @@
 /** {@link PropertyKey} list for TabListEditor. */
 @NullMarked
 public class TabListEditorProperties {
-    public static final PropertyModel.WritableBooleanPropertyKey IS_VISIBLE =
-            new PropertyModel.WritableBooleanPropertyKey();
-
-    public static final PropertyModel.WritableObjectPropertyKey<View.OnClickListener>
-            TOOLBAR_NAVIGATION_LISTENER = new PropertyModel.WritableObjectPropertyKey<>();
-
-    public static final PropertyModel.WritableIntPropertyKey PRIMARY_COLOR =
-            new PropertyModel.WritableIntPropertyKey();
-
-    public static final PropertyModel.WritableIntPropertyKey TOOLBAR_BACKGROUND_COLOR =
-            new PropertyModel.WritableIntPropertyKey();
-
-    public static final PropertyModel.WritableObjectPropertyKey<ColorStateList> TOOLBAR_TEXT_TINT =
-            new PropertyModel.WritableObjectPropertyKey<>();
-
-    public static final PropertyModel.WritableObjectPropertyKey<ColorStateList>
-            TOOLBAR_BUTTON_TINT = new PropertyModel.WritableObjectPropertyKey<>();
-
-    public static final PropertyModel.WritableObjectPropertyKey<String> TOOLBAR_TITLE =
-            new PropertyModel.WritableObjectPropertyKey<>();
-
-    public static final PropertyModel.WritableIntPropertyKey TOP_MARGIN =
-            new PropertyModel.WritableIntPropertyKey();
-
     public static final PropertyModel.WritableIntPropertyKey CREATION_MODE =
             new PropertyModel.WritableIntPropertyKey();
 
+    public static final PropertyModel.WritableObjectPropertyKey<View.OnClickListener>
+            DONE_BUTTON_CLICK_HANDLER = new PropertyModel.WritableObjectPropertyKey<>();
+
     public static final PropertyModel.WritableBooleanPropertyKey DONE_BUTTON_VISIBILITY =
             new PropertyModel.WritableBooleanPropertyKey();
 
     public static final PropertyModel.WritableBooleanPropertyKey IS_DONE_BUTTON_ENABLED =
             new PropertyModel.WritableBooleanPropertyKey();
 
+    public static final PropertyModel.WritableBooleanPropertyKey IS_VISIBLE =
+            new PropertyModel.WritableBooleanPropertyKey();
+
+    public static final PropertyModel.WritableIntPropertyKey PRIMARY_COLOR =
+            new PropertyModel.WritableIntPropertyKey();
+
+    public static final PropertyModel.WritableIntPropertyKey TOOLBAR_BACKGROUND_COLOR =
+            new PropertyModel.WritableIntPropertyKey();
+
+    public static final PropertyModel.WritableObjectPropertyKey<ColorStateList>
+            TOOLBAR_BUTTON_TINT = new PropertyModel.WritableObjectPropertyKey<>();
+
     public static final PropertyModel.WritableObjectPropertyKey<View.OnClickListener>
-            DONE_BUTTON_CLICK_HANDLER = new PropertyModel.WritableObjectPropertyKey<>();
+            TOOLBAR_NAVIGATION_LISTENER = new PropertyModel.WritableObjectPropertyKey<>();
+
+    public static final PropertyModel.WritableObjectPropertyKey<ColorStateList> TOOLBAR_TEXT_TINT =
+            new PropertyModel.WritableObjectPropertyKey<>();
+
+    public static final PropertyModel.WritableObjectPropertyKey<String> TOOLBAR_TITLE =
+            new PropertyModel.WritableObjectPropertyKey<>();
+
+    public static final PropertyModel.WritableIntPropertyKey TOP_MARGIN =
+            new PropertyModel.WritableIntPropertyKey();
 
     public static final PropertyKey[] ALL_KEYS =
             new PropertyKey[] {
-                IS_VISIBLE,
-                TOOLBAR_NAVIGATION_LISTENER,
-                PRIMARY_COLOR,
-                TOOLBAR_BACKGROUND_COLOR,
-                TOOLBAR_TEXT_TINT,
-                TOOLBAR_BUTTON_TINT,
-                TOOLBAR_TITLE,
-                TOP_MARGIN,
                 CREATION_MODE,
+                DONE_BUTTON_CLICK_HANDLER,
                 DONE_BUTTON_VISIBILITY,
                 IS_DONE_BUTTON_ENABLED,
-                DONE_BUTTON_CLICK_HANDLER
+                IS_VISIBLE,
+                PRIMARY_COLOR,
+                TOOLBAR_BACKGROUND_COLOR,
+                TOOLBAR_BUTTON_TINT,
+                TOOLBAR_NAVIGATION_LISTENER,
+                TOOLBAR_TEXT_TINT,
+                TOOLBAR_TITLE,
+                TOP_MARGIN
             };
 }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
index d7d2521..ac5edcf 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
@@ -73,6 +73,7 @@
 import org.chromium.chrome.browser.tab.TabLaunchType;
 import org.chromium.chrome.browser.tab.TabObserver;
 import org.chromium.chrome.browser.tab.TabSelectionType;
+import org.chromium.chrome.browser.tab.TabUtils;
 import org.chromium.chrome.browser.tab.state.ShoppingPersistedTabData;
 import org.chromium.chrome.browser.tab_group_sync.TabGroupSyncFeatures;
 import org.chromium.chrome.browser.tab_group_sync.TabGroupSyncServiceFactory;
@@ -599,7 +600,7 @@
                             model = mModelList.get(indexAndTab.first).model;
                         }
                     }
-                    if (tab != null && model != null) {
+                    if (TabUtils.isValid(tab) && model != null) {
                         model.set(TabProperties.URL_DOMAIN, getDomainForTab(tab));
                         // Changing URL will result in a thumbnail invalidation if the on-disk
                         // thumbnail doesn't match.
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabShareUtilsUnitTest.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabShareUtilsUnitTest.java
index ed8bbe6..3a43c4d 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabShareUtilsUnitTest.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabShareUtilsUnitTest.java
@@ -52,7 +52,6 @@
     @Mock TabModel mTabModel;
     @Mock TabGroupSyncService mTabGroupSyncService;
     @Mock IdentityManager mIdentityManager;
-    @Mock CoreAccountInfo mCoreAccountInfo;
 
     private final LocalTabGroupId mLocalTabGroupId = new LocalTabGroupId(TAB_GROUP_ID);
     private SavedTabGroup mSavedTabGroup;
@@ -81,9 +80,8 @@
 
         when(mTabGroupSyncService.getGroup(mLocalTabGroupId)).thenReturn(mSavedTabGroup);
 
-        when(mCoreAccountInfo.getGaiaId()).thenReturn(GAIA_ID);
         when(mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN))
-                .thenReturn(mCoreAccountInfo);
+                .thenReturn(CoreAccountInfo.createFromEmailAndGaiaId(EMAIL, GAIA_ID));
     }
 
     @Test
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneCoordinator.java
index cc140a21..3afad43 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneCoordinator.java
@@ -1059,7 +1059,19 @@
     }
 
     void showQuickDeleteAnimation(Runnable onAnimationEnd, List<Tab> tabs) {
-        mTabListCoordinator.showQuickDeleteAnimation(onAnimationEnd, tabs);
+        Runnable onAnimEnd =
+                () -> {
+                    onAnimationEnd.run();
+                    // Update the pinned tabs bar, as there might be movement of items in the
+                    // recycler view.
+                    if (mPinnedTabsCoordinator != null) mPinnedTabsCoordinator.onScrolled();
+                };
+        mTabListCoordinator.showQuickDeleteAnimation(onAnimEnd, tabs);
+
+        // Reveal the search bar if needed.
+        if (mPinnedTabsCoordinator != null) {
+            updatePinnedTabsStripOnScroll(/* shouldShowSearchBox= */ true, /* forced= */ false);
+        }
     }
 
     /** Returns the filter index of a tab from its view index. */
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherLayoutPTTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherLayoutPTTest.java
index 9028ec3..8a7b8be 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherLayoutPTTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherLayoutPTTest.java
@@ -14,6 +14,7 @@
 
 import static org.chromium.base.GarbageCollectionTestUtils.canBeGarbageCollected;
 import static org.chromium.base.test.transit.TransitAsserts.assertFinalDestination;
+import static org.chromium.base.test.transit.TransitAsserts.assertFinalDestinations;
 import static org.chromium.chrome.browser.flags.ChromeFeatureList.ANDROID_ELEGANT_TEXT_HEIGHT;
 import static org.chromium.chrome.test.util.ChromeTabUtils.getIndexOnUiThread;
 
@@ -270,18 +271,25 @@
                         "about:blank",
                         /* isIncognito= */ true,
                         WebPageStation::newBuilder);
-        assertTrue(cta.getCurrentTabModel().isIncognito());
+        assertTrue(pageStation.getTabModel().isIncognito());
         // Make sure all thumbnails are there before switching tabs.
         IncognitoTabSwitcherStation tabSwitcherStation =
                 enterIncognitoHtsWithThumbnailChecking(pageStation);
         pageStation = tabSwitcherStation.selectTabAtIndex(0, WebPageStation.newBuilder());
         tabSwitcherStation = pageStation.openIncognitoTabSwitcher();
-        ChromeRenderTestRule.sanitize(cta.findViewById(R.id.pane_frame));
-        mRenderTestRule.render(cta.findViewById(R.id.pane_frame), "3_incognito_web_tabs");
+        ChromeRenderTestRule.sanitize(
+                tabSwitcherStation.getActivity().findViewById(R.id.pane_frame));
+        mRenderTestRule.render(
+                tabSwitcherStation.getActivity().findViewById(R.id.pane_frame),
+                "3_incognito_web_tabs");
 
         WebPageStation previousPage =
                 tabSwitcherStation.leaveHubToPreviousTabViaBack(WebPageStation.newBuilder());
-        assertFinalDestination(previousPage);
+        if (previousPage.getActivity().isIncognitoWindow()) {
+            assertFinalDestinations(previousPage, mStartPage);
+        } else {
+            assertFinalDestination(previousPage);
+        }
     }
 
     @Test
@@ -788,6 +796,8 @@
 
     @Test
     @MediumTest
+    // TODO(crbug.com/457847264): Change to @Restriction(DeviceFormFactor.PHONE) after launch.
+    @DisableFeatures(ChromeFeatureList.ANDROID_OPEN_INCOGNITO_AS_WINDOW)
     public void testUrlUpdatedNotCrashing_ForTabNotInCurrentModel() throws Exception {
         WebPageStation regularPage = mCtaTestRule.startOnBlankPage();
         Tab regularTab = regularPage.loadedTabElement.value();
@@ -862,7 +872,6 @@
         List<Tab> tabsInGroup = new ArrayList<>();
         TabSwitcherStation tabSwitcher;
         WebPageStation pageStation;
-        ChromeTabbedActivity cta = mCtaTestRule.getActivity();
 
         // 1. SETUP: Create the tabs and the initial group.
         // We add an extra tab which will remain selected, allowing our tab group to show its color.
@@ -910,13 +919,18 @@
             editDialog.pressBackArrowToExit();
 
             // Test
-            ChromeRenderTestRule.sanitize(cta.findViewById(R.id.pane_frame));
+            ChromeRenderTestRule.sanitize(
+                    editDialog.getHostStation().getActivity().findViewById(R.id.pane_frame));
             String renderId = renderIdPrefix + colorName;
-            mRenderTestRule.render(cta.findViewById(R.id.pane_frame), renderId);
+            mRenderTestRule.render(
+                    editDialog.getHostStation().getActivity().findViewById(R.id.pane_frame),
+                    renderId);
         }
 
         // 3. CLEANUP: Leave the hub to the last active incognito tab.
         pageStation = tabSwitcher.leaveHubToPreviousTabViaBack(WebPageStation.newBuilder());
+        if (!pageStation.getActivity().isIncognitoWindow()) {
         assertFinalDestination(pageStation);
+        }
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java
index f457f85..3a8630e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java
@@ -984,7 +984,7 @@
 
     @Override
     public @Nullable SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) {
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager) {
         return null;
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
index c5e0290..29da84e6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
@@ -230,8 +230,7 @@
 
     @Override
     public SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) {
-        super.getUpdatedSceneOverlayTree(viewport, visibleViewport, resourceManager, yOffset);
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager) {
         mSceneLayer.update(
                 resourceManager,
                 this,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
index cada8190..b0bf0fc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
@@ -797,11 +797,6 @@
                         browserControlsManager);
         assumeNonNull(layer);
 
-        float offsetPx =
-                mBrowserControlsStateProvider == null
-                        ? 0
-                        : mBrowserControlsStateProvider.getTopControlOffset();
-
         for (SceneOverlay overlay : mSceneOverlays) {
             // If the SceneOverlay is not showing, don't bother adding it to the tree.
             if (!overlay.isSceneOverlayTreeShowing()) {
@@ -811,10 +806,7 @@
 
             SceneOverlayLayer overlayLayer =
                     overlay.getUpdatedSceneOverlayTree(
-                            mCachedWindowViewport,
-                            mCachedVisibleViewport,
-                            resourceManager,
-                            offsetPx * mPxToDp);
+                            mCachedWindowViewport, mCachedVisibleViewport, resourceManager);
             assumeNonNull(overlayLayer);
 
             overlayLayer.setContentTree(layer);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStacker.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStacker.java
index f5a812e92..0536cecb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStacker.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStacker.java
@@ -17,18 +17,18 @@
 
     @Override
     public void pushDrawPropertiesToViews(
-            StripLayoutView[] indexOrderedViews, float xOffset, float visibleWidth) {
+            StripLayoutView[] indexOrderedViews, float leftBound, float rightBound) {
         for (int i = 0; i < indexOrderedViews.length; i++) {
             StripLayoutView view = indexOrderedViews[i];
 
             view.setDrawX(view.getIdealX() + view.getOffsetX());
             view.setDrawY(view.getOffsetY());
             // visibility is based drawX - call this after setting drawX / Y.
-            setVisible(view, xOffset, visibleWidth);
+            setVisible(view, leftBound, rightBound);
         }
     }
 
-    private static void setVisible(StripLayoutView view, float xOffset, float visibleWidth) {
+    private static void setVisible(StripLayoutView view, float leftBound, float rightBound) {
         float drawXAccountingPadding = 0f;
         float width = 0f;
         if (view instanceof StripLayoutGroupTitle groupTitle) {
@@ -54,7 +54,7 @@
             assert false : "Method should be invoked only for tabs and groups";
         }
         view.setVisible(
-                (drawXAccountingPadding + width) >= xOffset
-                        && drawXAccountingPadding <= xOffset + visibleWidth);
+                (drawXAccountingPadding + width) >= leftBound
+                        && drawXAccountingPadding <= rightBound);
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
index 4750a83..b0836b3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
@@ -4837,11 +4837,10 @@
         computeIdealViewPositions();
 
         // 3. Calculate view stacking - update view draw properties and visibility.
-        float stripWidth =
-                getVisibleRightBound(/* clampToUnpinnedViews= */ false)
-                        - getVisibleLeftBound(/* clampToUnpinnedViews= */ false);
         mStripStacker.pushDrawPropertiesToViews(
-                mStripViews, getVisibleLeftBound(/* clampToUnpinnedViews= */ false), stripWidth);
+                mStripViews,
+                getVisibleLeftBound(/* clampToUnpinnedViews= */ false),
+                getVisibleRightBound(/* clampToUnpinnedViews= */ false));
         mStripStacker.pushDrawPropertiesToButtons(
                 mNewTabButton,
                 mStripTabs,
@@ -5054,6 +5053,17 @@
         if (mTabAtPositionForTesting != null) {
             return mTabAtPositionForTesting;
         }
+
+        // Views are only hidden once they're completely out of the visible region. Since tabs are
+        // wider than the NTB (which is roughly where the end-fade begins), it is possible for a tab
+        // to be visible while having its touch target partially past the NTB. Visible tabs are
+        // considered clickable, so manually suppress clicks beyond the NTB to prevent this.
+        if (LocalizationUtils.isLayoutRtl()) {
+            if (x <= mNewTabButton.getDrawX() + mNewTabButton.getWidth()) return null;
+        } else {
+            if (x >= mNewTabButton.getDrawX()) return null;
+        }
+
         return StripLayoutUtils.findViewAtPositionX(mStripViews, x, includeGroupTitles);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java
index a886350..c8343d3a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java
@@ -807,12 +807,11 @@
 
     @Override
     public SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) {
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager) {
         assert mTabStripTreeProvider != null;
 
-        setStripVisibilityState(
-                StripVisibilityState.HIDDEN_BY_SCROLL,
-                /* clear= */ mBrowserControlsStateProvider.getTopControlOffset() >= 0);
+        float yOffset = mBrowserControlsStateProvider.getTopControlOffset() / mDensity;
+        setStripVisibilityState(StripVisibilityState.HIDDEN_BY_SCROLL, /* clear= */ yOffset >= 0);
         Tab selectedTab =
                 mTabModelSelector == null
                         ? null
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java
index 5838e599..bd64e624 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutUtils.java
@@ -292,10 +292,12 @@
     }
 
     /**
+     * Returns a visible {@link StripLayoutView} at the given x-position, or {@code null} if none.
+     *
      * @param views The list of {@link StripLayoutView}.
      * @param x The x position to use to retrieve view.
      * @param includeGroupTitles Whether to include group title when finding view.
-     * @return View at x position.{@code null} if no view at position or if input criteria not met.
+     * @return View at x position. {@code null} if no view at position or if input criteria not met.
      */
     public static @Nullable StripLayoutView findViewAtPositionX(
             StripLayoutView[] views, float x, boolean includeGroupTitles) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java
index cb92de7..5d50e5277 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java
@@ -18,6 +18,7 @@
 import org.chromium.build.annotations.Nullable;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.DefaultBrowserInfo;
+import org.chromium.chrome.browser.incognito.IncognitoUtils;
 import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
 import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
 import org.chromium.chrome.browser.profiles.Profile;
@@ -301,9 +302,20 @@
                         item,
                         ChromePreferenceKeys.CONTEXT_MENU_SHOP_IMAGE_WITH_GOOGLE_LENS_CLICKED,
                         showInProductHelp);
+            case Item.OPEN_IN_CHROME_INCOGNITO_TAB:
+                if (IncognitoUtils.shouldOpenIncognitoAsWindow()) {
+                    return context.getString(R.string.contextmenu_open_in_incognito_window);
+                }
+                break;
+            case Item.OPEN_IN_NEW_CHROME_TAB:
+                if (IncognitoUtils.shouldOpenIncognitoAsWindow()) {
+                    return context.getString(R.string.contextmenu_open_in_chrome_window);
+                }
+                break;
             default:
                 return context.getString(getStringId(item));
         }
+        return context.getString(getStringId(item));
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
index 8b264d8..cba35f1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -160,6 +160,10 @@
     static final String PARALLEL_REQUEST_URL_KEY =
             "android.support.customtabs.PARALLEL_REQUEST_URL";
 
+    @VisibleForTesting
+    static final String PARALLEL_REQUEST_URL_LIST_KEY =
+            "android.support.customtabs.PARALLEL_REQUEST_URL_LIST";
+
     static final String RESOURCE_PREFETCH_URL_LIST_KEY =
             "androidx.browser.RESOURCE_PREFETCH_URL_LIST";
 
@@ -1203,24 +1207,33 @@
             Log.w(TAG, "handleParallelRequest() = " + PARALLEL_REQUEST_MESSAGES[status]);
         }
 
-        if ((status != ParallelRequestStatus.NO_REQUEST)
-                && (status != ParallelRequestStatus.FAILURE_NOT_INITIALIZED)
-                && (status != ParallelRequestStatus.FAILURE_NOT_AUTHORIZED)
-                && ChromeFeatureList.isEnabled(
-                        ChromeFeatureList.CCT_REPORT_PARALLEL_REQUEST_STATUS)) {
-            Bundle args = new Bundle();
-            Uri url = intent.getParcelableExtra(PARALLEL_REQUEST_URL_KEY);
-            args.putParcelable("url", url);
-            args.putInt("status", status);
-            safeExtraCallback(session, ON_DETACHED_REQUEST_REQUESTED, args);
-            if (mLogRequests) {
-                logCallback(ON_DETACHED_REQUEST_REQUESTED, bundleToJson(args).toString());
-            }
+        // Success is already reported per URL, report any failures here.
+        if ((status != ParallelRequestStatus.SUCCESS)) {
+            reportParallelRequestStatus(
+                    session, status, intent.getParcelableExtra(PARALLEL_REQUEST_URL_KEY));
         }
 
         return status;
     }
 
+    private void reportParallelRequestStatus(
+            @Nullable SessionHolder<?> session,
+            @ParallelRequestStatus int status,
+            @Nullable Uri url) {
+        if ((status == ParallelRequestStatus.NO_REQUEST)
+                || !ChromeFeatureList.isEnabled(
+                        ChromeFeatureList.CCT_REPORT_PARALLEL_REQUEST_STATUS)) {
+            return;
+        }
+        Bundle args = new Bundle();
+        args.putParcelable("url", url);
+        args.putInt("status", status);
+        safeExtraCallback(session, ON_DETACHED_REQUEST_REQUESTED, args);
+        if (mLogRequests) {
+            logCallback(ON_DETACHED_REQUEST_REQUESTED, bundleToJson(args).toString());
+        }
+    }
+
     /**
      * Maybe starts a parallel request.
      *
@@ -1232,46 +1245,70 @@
             @Nullable SessionHolder<?> session, Intent intent) {
         ThreadUtils.assertOnUiThread();
 
-        if (!intent.hasExtra(PARALLEL_REQUEST_URL_KEY)) return ParallelRequestStatus.NO_REQUEST;
+        if (!intent.hasExtra(PARALLEL_REQUEST_URL_KEY)
+                && !intent.hasExtra(PARALLEL_REQUEST_URL_LIST_KEY)) {
+            return ParallelRequestStatus.NO_REQUEST;
+        }
         if (!ChromeBrowserInitializer.getInstance().isFullBrowserInitialized()) {
             return ParallelRequestStatus.FAILURE_NOT_INITIALIZED;
         }
-        if (!mClientManager.getAllowParallelRequestForSession(session)) {
+        String packageName = mClientManager.getClientPackageNameForSession(session);
+        if (session == null
+                || packageName == null
+                || !mClientManager.getAllowParallelRequestForSession(session)) {
             return ParallelRequestStatus.FAILURE_NOT_AUTHORIZED;
         }
-        Uri referrer = intent.getParcelableExtra(PARALLEL_REQUEST_REFERRER_KEY);
-        Uri url = intent.getParcelableExtra(PARALLEL_REQUEST_URL_KEY);
+
+        Uri referrer = IntentUtils.safeGetParcelableExtra(intent, PARALLEL_REQUEST_REFERRER_KEY);
         int policy =
                 intent.getIntExtra(PARALLEL_REQUEST_REFERRER_POLICY_KEY, ReferrerPolicy.DEFAULT);
-        if (url == null) return ParallelRequestStatus.FAILURE_INVALID_URL;
         if (referrer == null) return ParallelRequestStatus.FAILURE_INVALID_REFERRER;
         if (policy < ReferrerPolicy.MIN_VALUE || policy > ReferrerPolicy.MAX_VALUE) {
             policy = ReferrerPolicy.DEFAULT;
         }
 
-        if (url.toString().equals("") || !isValid(url)) {
-            return ParallelRequestStatus.FAILURE_INVALID_URL;
-        }
         if (!canDoParallelRequest(session, referrer)) {
             return ParallelRequestStatus.FAILURE_INVALID_REFERRER_FOR_SESSION;
         }
 
-        String urlString = url.toString();
         String referrerString = referrer.toString();
-        String packageName = mClientManager.getClientPackageNameForSession(session);
+        Uri uri = intent.getParcelableExtra(PARALLEL_REQUEST_URL_KEY);
+        if (uri != null) {
+            return doParallelResourceRequest(session, uri, referrerString, packageName, policy);
+        }
+
+        List<Uri> urls =
+                IntentUtils.getParcelableArrayListExtra(intent, PARALLEL_REQUEST_URL_LIST_KEY);
+        if (urls == null) return ParallelRequestStatus.FAILURE_INVALID_URL;
+        for (Uri url : urls) {
+            @ParallelRequestStatus
+            int result =
+                    doParallelResourceRequest(session, url, referrerString, packageName, policy);
+            if (result != ParallelRequestStatus.SUCCESS) return result;
+        }
+        return ParallelRequestStatus.SUCCESS;
+    }
+
+    private @ParallelRequestStatus int doParallelResourceRequest(
+            SessionHolder<?> session, Uri url, String referrer, String packageName, int policy) {
+        if (url.toString().equals("") || !isValid(url)) {
+            return ParallelRequestStatus.FAILURE_INVALID_URL;
+        }
+        String urlString = url.toString();
+
         CustomTabsConnectionJni.get()
                 .createAndStartDetachedResourceRequest(
                         ProfileManager.getLastUsedRegularProfile(),
                         session,
                         packageName,
                         urlString,
-                        referrerString,
+                        referrer,
                         policy,
                         DetachedResourceRequestMotivation.PARALLEL_REQUEST);
         if (mLogRequests) {
-            Log.w(TAG, "startParallelRequest(%s, %s, %d)", urlString, referrerString, policy);
+            Log.w(TAG, "startParallelRequest(%s, %s, %d)", urlString, referrer, policy);
         }
-
+        reportParallelRequestStatus(session, ParallelRequestStatus.SUCCESS, url);
         return ParallelRequestStatus.SUCCESS;
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/OverscrollGlowOverlay.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/OverscrollGlowOverlay.java
index 5e8becb6..af6c95b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/OverscrollGlowOverlay.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/OverscrollGlowOverlay.java
@@ -73,7 +73,7 @@
 
     @Override
     public SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) {
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager) {
         if (!mSceneLayer.update(resourceManager, mOffset)) setIsShowing(false);
         return mSceneLayer;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinator.java
index 0f2430422..153cc49 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinator.java
@@ -33,6 +33,7 @@
 import org.chromium.chrome.browser.safe_browsing.settings.SafeBrowsingSettingsFragment;
 import org.chromium.chrome.browser.settings.SettingsNavigationFactory;
 import org.chromium.chrome.browser.toolbar.settings.AddressBarSettingsFragment;
+import org.chromium.chrome.browser.toolbar.settings.AddressBarSettingsFragment.HighlightedOption;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.StateChangeReason;
@@ -234,7 +235,11 @@
                 break;
             case TipsNotificationsFeatureType.BOTTOM_OMNIBOX:
                 SettingsNavigationFactory.createSettingsNavigation()
-                        .startSettings(mContext, AddressBarSettingsFragment.class);
+                        .startSettings(
+                                mContext,
+                                AddressBarSettingsFragment.class,
+                                AddressBarSettingsFragment.createArguments(
+                                        HighlightedOption.BOTTOM_TOOLBAR));
                 break;
             default:
                 assert false : "Invalid feature type: " + featureType;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java
index 4b82e865..66e0f55 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java
@@ -469,6 +469,12 @@
             return;
         }
 
+        // Here, if fragment is MainSettings, this is running in single-column layout.
+        // So, we should disable selection highlight.
+        if (fragment instanceof MainSettings mainSettings) {
+            mainSettings.setMultiColumnSettings(null, null);
+        }
+
         fragment.requireContext()
                 .getTheme()
                 .applyStyle(R.style.ThemeOverlay_Chromium_Settings_Containment, true);
@@ -1035,7 +1041,8 @@
         @Override
         public void onFragmentAttached(
                 FragmentManager fragmentManager, Fragment fragment, Context context) {
-            if (!MAIN_FRAGMENT_TAG.equals(fragment.getTag())) {
+            if (!(fragment instanceof SettingsFragment)
+                    && !MAIN_FRAGMENT_TAG.equals(fragment.getTag())) {
                 return;
             }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java
index d65b4ef..871c76e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java
@@ -74,7 +74,7 @@
 
     @Override
     public SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) {
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager) {
         final int offset = mBrowserControlsStateProvider.getTopControlsMinHeightOffset();
         StatusIndicatorSceneLayerJni.get()
                 .updateStatusIndicatorLayer(mNativePtr, resourceManager, mResourceId, offset);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFavicon.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFavicon.java
index 611eac1..8f01d1c9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFavicon.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFavicon.java
@@ -60,9 +60,9 @@
     }
 
     private static @Nullable TabFavicon get(Tab tab) {
-        if (sInstanceForTesting != null) return sInstanceForTesting;
-        if (tab == null || !tab.isInitialized()) return null;
-        return tab.getUserDataHost().getUserData(USER_DATA_KEY);
+        return sInstanceForTesting != null
+                ? sInstanceForTesting
+                : !TabUtils.isValid(tab) ? null : tab.getUserDataHost().getUserData(USER_DATA_KEY);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
index d4efaa7..c018b59 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
@@ -26,6 +26,7 @@
 
 import org.chromium.base.ContextUtils;
 import org.chromium.base.DeviceInfo;
+import org.chromium.build.annotations.Contract;
 import org.chromium.build.annotations.NullMarked;
 import org.chromium.build.annotations.Nullable;
 import org.chromium.chrome.R;
@@ -54,6 +55,14 @@
     private TabUtils() {}
 
     /**
+     * @return Whether the given tab is initialized and not destroyed.
+     */
+    @Contract("null -> false")
+    public static boolean isValid(@Nullable Tab tab) {
+        return tab != null && tab.isInitialized() && !tab.isDestroyed();
+    }
+
+    /**
      * @return {@link Activity} associated with the given tab.
      */
     public static @Nullable Activity getActivity(Tab tab) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelRemoverUnitTest.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelRemoverUnitTest.java
index e6c69887..4d24109 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelRemoverUnitTest.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelRemoverUnitTest.java
@@ -52,9 +52,9 @@
 import org.chromium.components.collaboration.CollaborationService;
 import org.chromium.components.data_sharing.DataSharingService;
 import org.chromium.components.data_sharing.member_role.MemberRole;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.identitymanager.IdentityManager;
+import org.chromium.components.signin.test.util.TestAccounts;
 import org.chromium.components.tab_group_sync.LocalTabGroupId;
 import org.chromium.components.tab_group_sync.SavedTabGroup;
 import org.chromium.components.tab_group_sync.TabGroupSyncService;
@@ -65,7 +65,6 @@
 /** Unit tests for {@link TabModelRemover}. */
 @RunWith(BaseRobolectricTestRunner.class)
 public class TabModelRemoverUnitTest {
-    private static final String EMAIL = "test@example.com";
     private static final String COLLABORATION_ID = "collaboration";
     private static final String TAB_GROUP_TITLE = "My Title";
     private static final LocalTabGroupId TAB_GROUP_1 = new LocalTabGroupId(new Token(1L, 2L));
@@ -78,7 +77,6 @@
     @Mock private Profile mProfile;
     @Mock private IdentityServicesProvider mIdentityServicesProvider;
     @Mock private IdentityManager mIdentityManager;
-    @Mock private CoreAccountInfo mCoreAccountInfo;
     @Mock private TabGroupModelFilterInternal mTabGroupModelFilter;
     @Mock private TabModelRemoverFlowHandler mHandler;
     @Mock private ModalDialogManager mModalDialogManager;
@@ -109,8 +107,7 @@
         IdentityServicesProvider.setInstanceForTests(mIdentityServicesProvider);
         when(mIdentityServicesProvider.getIdentityManager(mProfile)).thenReturn(mIdentityManager);
         when(mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN))
-                .thenReturn(mCoreAccountInfo);
-        when(mCoreAccountInfo.getEmail()).thenReturn(EMAIL);
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         DataSharingServiceFactory.setForTesting(mDataSharingService);
         CollaborationServiceFactory.setForTesting(mCollaborationService);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java
index 9592fcf9..4706aef 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/DetachedResourceRequestTest.java
@@ -326,6 +326,82 @@
 
     @Test
     @SmallTest
+    @EnableFeatures(ChromeFeatureList.CCT_REPORT_PARALLEL_REQUEST_STATUS)
+    public void testMultipleParallelRequestCompletionSuccessCallbacks() throws Exception {
+        var histogram =
+                HistogramWatcher.newSingleRecordWatcher(
+                        "CustomTabs.ParallelRequestStatusOnStart", 1);
+        final CallbackHelper cb = new CallbackHelper();
+        setUpTestServerWithListener(
+                new EmbeddedTestServer.ConnectionListener() {
+                    @Override
+                    public void readFromSocket(long socketId) {
+                        cb.notifyCalled();
+                    }
+                });
+        ArrayList<Uri> urls =
+                new ArrayList<>(
+                        Arrays.asList(
+                                Uri.parse(mServer.getURL("/nocontent?a=1")),
+                                Uri.parse(mServer.getURL("/nocontent?a=2")),
+                                Uri.parse(mServer.getURL("/nocontent?a=3"))));
+        final CallbackHelper url1StartedCallback = new CallbackHelper();
+        final CallbackHelper url1FinishedCallback = new CallbackHelper();
+        final CallbackHelper url2StartedCallback = new CallbackHelper();
+        final CallbackHelper url2FinishedCallback = new CallbackHelper();
+        final CallbackHelper url3StartedCallback = new CallbackHelper();
+        final CallbackHelper url3FinishedCallback = new CallbackHelper();
+
+        CustomTabsCallback customTabsCallback =
+                new CustomTabsCallback() {
+                    @Override
+                    public void extraCallback(String callbackName, Bundle args) {
+                        if (CustomTabsConnection.ON_DETACHED_REQUEST_REQUESTED.equals(
+                                callbackName)) {
+                            Uri url = args.getParcelable("url");
+                            int status = args.getInt("status");
+                            Assert.assertEquals(
+                                    CustomTabsConnection.ParallelRequestStatus.SUCCESS, status);
+                            if (url.equals(urls.get(0))) {
+                                url1StartedCallback.notifyCalled();
+                            } else if (url.equals(urls.get(1))) {
+                                url2StartedCallback.notifyCalled();
+                            } else if (url.equals(urls.get(2))) {
+                                url3StartedCallback.notifyCalled();
+                            }
+                        } else if (CustomTabsConnection.ON_DETACHED_REQUEST_COMPLETED.equals(
+                                callbackName)) {
+                            Uri url = args.getParcelable("url");
+                            int status = args.getInt("net_error");
+                            Assert.assertEquals(NetError.OK, status);
+                            if (url.equals(urls.get(0))) {
+                                url1FinishedCallback.notifyCalled();
+                            } else if (url.equals(urls.get(1))) {
+                                url2FinishedCallback.notifyCalled();
+                            } else if (url.equals(urls.get(2))) {
+                                url3FinishedCallback.notifyCalled();
+                            }
+                        }
+                    }
+                };
+        var sessionHolder = prepareSession(ORIGIN, customTabsCallback);
+
+        PostTask.runOrPostTask(
+                TaskTraits.UI_DEFAULT,
+                () -> mConnection.onHandledIntent(sessionHolder, prepareIntent(urls, ORIGIN)));
+        CustomTabsTestUtils.warmUpAndWait();
+        url1StartedCallback.waitForOnly();
+        url2StartedCallback.waitForOnly();
+        url3StartedCallback.waitForOnly();
+        cb.waitForCallback(0, urls.size());
+        url1FinishedCallback.waitForOnly();
+        url2FinishedCallback.waitForOnly();
+        url3FinishedCallback.waitForOnly();
+        histogram.assertExpected();
+    }
+
+    @Test
+    @SmallTest
     public void testCanStartResourcePrefetch() throws Exception {
         var sessionHolder = prepareSession();
         CustomTabsTestUtils.warmUpAndWait();
@@ -581,12 +657,12 @@
         // Launching a CCT and loading a URL takes more time than usual. Gives a longer timeout.
         // See crbug.com/40737671.
         mContext.startActivity(intent);
-        callback.waitForRequest(0, 1, 10, TimeUnit.SECONDS);
-        callback.waitForCompletion(0, 1, 10, TimeUnit.SECONDS);
+        callback.waitForRequest(0, 1, 20, TimeUnit.SECONDS);
+        callback.waitForCompletion(0, 1, 20, TimeUnit.SECONDS);
 
         mContext.startActivity(intent);
-        callback.waitForRequest(1, 1, 10, TimeUnit.SECONDS);
-        callback.waitForCompletion(1, 1, 10, TimeUnit.SECONDS);
+        callback.waitForRequest(1, 1, 20, TimeUnit.SECONDS);
+        callback.waitForCompletion(1, 1, 20, TimeUnit.SECONDS);
     }
 
     private void testCanStartParallelRequest(boolean afterNative) throws Exception {
@@ -753,6 +829,15 @@
         return intent;
     }
 
+    private static Intent prepareIntent(ArrayList<Uri> urls, Uri referrer) {
+        Intent intent = new Intent();
+        intent.setData(Uri.parse("http://www.example.com"));
+        intent.putParcelableArrayListExtra(
+                CustomTabsConnection.PARALLEL_REQUEST_URL_LIST_KEY, urls);
+        intent.putExtra(CustomTabsConnection.PARALLEL_REQUEST_REFERRER_KEY, referrer);
+        return intent;
+    }
+
     private static Intent prepareIntentForResourcePrefetch(List<Uri> urls, Uri referrer) {
         Intent intent = new Intent();
         intent.setData(Uri.parse("http://www.example.com"));
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoCookieLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoCookieLeakageTest.java
index a84d84d..d103e9f 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoCookieLeakageTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoCookieLeakageTest.java
@@ -18,7 +18,6 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameter;
 import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate;
 import org.chromium.base.test.params.ParameterProvider;
@@ -73,8 +72,7 @@
 
     @After
     public void tearDown() {
-        ThreadUtils.runOnUiThreadBlocking(
-                () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule));
+        mChromeActivityTestRule.closeAllWindowsAndDeleteInstanceAndTabState();
     }
 
     private void setCookies(Tab tab) throws TimeoutException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java
index 32aa9e1..6fd7205 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java
@@ -171,8 +171,7 @@
                 () ->
                         DownloadManagerService.getDownloadManagerService()
                                 .removeDownloadObserver(mTestDownloadManagerServiceObserver));
-        ThreadUtils.runOnUiThreadBlocking(
-                () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule));
+        mChromeActivityTestRule.closeAllWindowsAndDeleteInstanceAndTabState();
     }
 
     private boolean hasFileDownloaded(String downloadedFileName) {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java
index 37fa9f7..7029242 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java
@@ -85,8 +85,7 @@
 
     @After
     public void tearDown() {
-        ThreadUtils.runOnUiThreadBlocking(
-                () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule));
+        mChromeActivityTestRule.closeAllWindowsAndDeleteInstanceAndTabState();
     }
 
     /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java
index f70585a..dab78108 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java
@@ -18,7 +18,6 @@
 
 import static org.chromium.ui.test.util.ViewUtils.onViewWaiting;
 
-import android.app.Activity;
 import android.os.Build;
 
 import androidx.test.espresso.Espresso;
@@ -36,26 +35,21 @@
 import org.mockito.junit.MockitoRule;
 
 import org.chromium.base.ThreadUtils;
-import org.chromium.base.test.ActivityFinisher;
 import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameter;
 import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate;
 import org.chromium.base.test.params.ParameterProvider;
 import org.chromium.base.test.params.ParameterSet;
 import org.chromium.base.test.params.ParameterizedRunner;
-import org.chromium.base.test.transit.Station;
-import org.chromium.base.test.transit.TrafficControl;
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Criteria;
 import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.DisableIf;
 import org.chromium.base.test.util.DisabledTest;
-import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.customtabs.IncognitoCustomTabActivityTestRule;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils.ActivityType;
 import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils.TestParams;
-import org.chromium.chrome.browser.multiwindow.MultiInstanceManager;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabLoadIfNeededCaller;
 import org.chromium.chrome.browser.ui.hats.SurveyClient;
@@ -121,29 +115,7 @@
 
     @After
     public void tearDown() {
-        ThreadUtils.runOnUiThreadBlocking(
-                () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule));
-        List<Station<?>> activeStations = TrafficControl.getActiveStations();
-        for (Station<?> station : activeStations) {
-            station.getActivity().finish();
-            // TODO(crbug.com/460433346): Close CTA Instances at the end of multiwindow tests
-            Activity activity = station.getActivity();
-            if (activity instanceof ChromeTabbedActivity cta) {
-                ThreadUtils.runOnUiThreadBlocking(
-                        () -> {
-                            MultiInstanceManager mim = cta.getMultiInstanceMangerForTesting();
-                            mim.closeWindow(
-                                    cta.getWindowIdForTesting(),
-                                    MultiInstanceManager.CloseWindowAppSource.OTHER);
-                        });
-            } else {
-                station.getActivity().finishAndRemoveTask();
-            }
-        }
-        TrafficControl.hopOffPublicTransit();
-
-        // TODO(crbug.com/363311624): Temporary fix to close all CCT
-        ActivityFinisher.finishAll();
+        mChromeActivityTestRule.closeAllWindowsAndDeleteInstanceAndTabState();
     }
 
     private void requestLocationPermission(Tab tab) throws TimeoutException, ExecutionException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoStorageLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoStorageLeakageTest.java
index 8c48efc..c943ae3 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoStorageLeakageTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoStorageLeakageTest.java
@@ -6,7 +6,6 @@
 
 import static org.junit.Assert.assertEquals;
 
-import android.app.Activity;
 import android.os.Build;
 
 import androidx.test.filters.LargeTest;
@@ -19,23 +18,18 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.ThreadUtils;
-import org.chromium.base.test.ActivityFinisher;
 import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameter;
 import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate;
 import org.chromium.base.test.params.ParameterizedRunner;
-import org.chromium.base.test.transit.Station;
-import org.chromium.base.test.transit.TrafficControl;
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Criteria;
 import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.DisableIf;
-import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.customtabs.IncognitoCustomTabActivityTestRule;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils.ActivityType;
 import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils.TestParams;
-import org.chromium.chrome.browser.multiwindow.MultiInstanceManager;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabLoadIfNeededCaller;
 import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
@@ -85,29 +79,7 @@
 
     @After
     public void tearDown() {
-        ThreadUtils.runOnUiThreadBlocking(
-                () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule));
-        List<Station<?>> activeStations = TrafficControl.getActiveStations();
-        for (Station<?> station : activeStations) {
-            station.getActivity().finish();
-            // TODO(crbug.com/460433346): Close CTA Instances at the end of multiwindow tests
-            Activity activity = station.getActivity();
-            if (activity instanceof ChromeTabbedActivity cta) {
-                ThreadUtils.runOnUiThreadBlocking(
-                        () -> {
-                            MultiInstanceManager mim = cta.getMultiInstanceMangerForTesting();
-                            mim.closeWindow(
-                                    cta.getWindowIdForTesting(),
-                                    MultiInstanceManager.CloseWindowAppSource.OTHER);
-                        });
-            } else {
-                station.getActivity().finishAndRemoveTask();
-            }
-        }
-        TrafficControl.hopOffPublicTransit();
-
-        // TODO(crbug.com/363311624): Temporary fix to close all CCT
-        ActivityFinisher.finishAll();
+        mChromeActivityTestRule.closeAllWindowsAndDeleteInstanceAndTabState();
     }
 
     @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java
index f604d1f..0330423d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTest.java
@@ -18,7 +18,9 @@
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.HistogramWatcher;
+import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.incognito.IncognitoUtils;
 import org.chromium.chrome.browser.permissions.RuntimePermissionTestUtils.RuntimePromptResponse;
 import org.chromium.chrome.browser.permissions.RuntimePermissionTestUtils.TestAndroidPermissionDelegate;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
@@ -358,7 +360,13 @@
     @Feature({"RuntimePermissions", "Location"})
     public void testAllowRuntimeLocationIncognito() throws Exception {
         RuntimePermissionTestUtils.setupGeolocationSystemMock();
-        mPermissionTestRule.newIncognitoTabFromMenu();
+        ChromeActivity incognitoActivity;
+        if (IncognitoUtils.shouldOpenIncognitoAsWindow()) {
+            incognitoActivity = mPermissionTestRule.newIncognitoWindowFromMenu();
+        } else {
+            mPermissionTestRule.newIncognitoTabFromMenu();
+            incognitoActivity = mPermissionTestRule.getActivity();
+        }
 
         String[] requestablePermission =
                 new String[] {
@@ -369,6 +377,7 @@
                 new TestAndroidPermissionDelegate(
                         requestablePermission, RuntimePromptResponse.GRANT);
         RuntimePermissionTestUtils.runTest(
+                incognitoActivity,
                 mPermissionTestRule,
                 mTestAndroidPermissionDelegate,
                 GEOLOCATION_TEST,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java
index 297b02bc..0bf9e13 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java
@@ -22,7 +22,10 @@
 import org.chromium.chrome.browser.permissions.PermissionTestRule.PermissionUpdateWaiter;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.test.R;
+import org.chromium.chrome.test.util.ChromeTabUtils;
 import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil;
+import org.chromium.content_public.browser.test.util.JavaScriptUtils;
+import org.chromium.content_public.browser.test.util.TouchCommon;
 import org.chromium.device.geolocation.LocationProviderOverrider;
 import org.chromium.device.geolocation.MockLocationProvider;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
@@ -142,6 +145,7 @@
     /**
      * Run a test related to the runtime permission prompt, based on the specified parameters.
      *
+     * @param activity The ChromeActivity instance to use for this test.
      * @param permissionTestRule The PermissionTestRule of the calling test.
      * @param testAndroidPermissionDelegate The TestAndroidPermissionDelegate to be used for this
      *     test.
@@ -160,6 +164,7 @@
      *     missing permission prompt dialog (0 if not applicable).
      */
     public static void runTest(
+            final ChromeActivity activity,
             final PermissionTestRule permissionTestRule,
             final TestAndroidPermissionDelegate testAndroidPermissionDelegate,
             final String testUrl,
@@ -170,7 +175,6 @@
             final String javascriptToExecute,
             final @StringRes int missingPermissionPromptTextId)
             throws Exception {
-        final ChromeActivity activity = permissionTestRule.getActivity();
         activity.getWindowAndroid().setAndroidPermissionDelegate(testAndroidPermissionDelegate);
 
         final Tab tab = ThreadUtils.runOnUiThreadBlocking(() -> activity.getActivityTab());
@@ -179,10 +183,19 @@
                         expectPermissionAllowed ? "Granted" : "Denied", activity);
         ThreadUtils.runOnUiThreadBlocking(() -> tab.addObserver(permissionUpdateWaiter));
 
-        permissionTestRule.setUpUrl(testUrl);
+        final String url = permissionTestRule.getURL(testUrl);
+        ChromeTabUtils.waitForTabPageLoaded(
+                tab,
+                url,
+                () -> {
+                    ChromeTabUtils.loadUrlOnUiThread(tab, url);
+                });
 
         if (javascriptToExecute != null && !javascriptToExecute.isEmpty()) {
-            permissionTestRule.runJavaScriptCodeInCurrentTabWithGesture(javascriptToExecute);
+            JavaScriptUtils.executeJavaScriptAndWaitForResult(
+                    ThreadUtils.runOnUiThreadBlocking(() -> tab.getWebContents()),
+                    "functionToRun = '" + javascriptToExecute + "'");
+            TouchCommon.singleClickView(ThreadUtils.runOnUiThreadBlocking(() -> tab.getView()));
         }
 
         PropertyModel askPermissionDialogModel = null;
@@ -241,4 +254,33 @@
 
         ThreadUtils.runOnUiThreadBlocking(() -> tab.removeObserver(permissionUpdateWaiter));
     }
+
+    /**
+     * This is a convenience method that automatically retrieves the {@link ChromeActivity} from the
+     * {@link PermissionTestRule} before running the test.
+     */
+    public static void runTest(
+            final PermissionTestRule permissionTestRule,
+            final TestAndroidPermissionDelegate testAndroidPermissionDelegate,
+            final String testUrl,
+            final boolean expectPermissionAllowed,
+            final @PermissionTestRule.PromptDecision int promptDecision,
+            final boolean waitForMissingPermissionPrompt,
+            final boolean waitForUpdater,
+            final String javascriptToExecute,
+            final @StringRes int missingPermissionPromptTextId)
+            throws Exception {
+        final ChromeActivity activity = permissionTestRule.getActivity();
+        runTest(
+                activity,
+                permissionTestRule,
+                testAndroidPermissionDelegate,
+                testUrl,
+                expectPermissionAllowed,
+                promptDecision,
+                waitForMissingPermissionPrompt,
+                waitForUpdater,
+                javascriptToExecute,
+                missingPermissionPromptTextId);
+    }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelImplTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelImplTest.java
index a073f03a..7e44f95 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelImplTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelImplTest.java
@@ -172,6 +172,8 @@
 
     @Test
     @SmallTest
+    // TODO(crbug.com/457847264): Change to @Restriction(DeviceFormFactor.PHONE) after launch
+    @DisableFeatures(ChromeFeatureList.ANDROID_OPEN_INCOGNITO_AS_WINDOW)
     public void validIndexAfterRestored_FromPreviousActivity_WithIncognitoTabs() {
         mPage = Journeys.createIncognitoTabsWithWebPages(mPage, List.of(mTestUrl));
 
@@ -1067,6 +1069,8 @@
 
     @Test
     @SmallTest
+    // TODO(crbug.com/457847264): Change to @Restriction(DeviceFormFactor.PHONE) after launch
+    @DisableFeatures(ChromeFeatureList.ANDROID_OPEN_INCOGNITO_AS_WINDOW)
     public void testCloseIncognitoTabSwitchesToNormalModelAndUpdatesIncognitoIndex() {
         TabModel incognitoTabModel =
                 mActivityTestRule.getActivity().getTabModelSelector().getModel(true);
@@ -1567,6 +1571,8 @@
 
     @Test
     @SmallTest
+    // TODO(crbug.com/457847264): Change to @Restriction(DeviceFormFactor.PHONE) after launch
+    @DisableFeatures(ChromeFeatureList.ANDROID_OPEN_INCOGNITO_AS_WINDOW)
     public void testSetMuteSetting_Incognito() {
         WebPageStation page = mPage.loadWebPageProgrammatically(mTestUrl);
         Journeys.createIncognitoTabsWithWebPages(page, List.of(mTestUrl));
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webauth/Fido2CredentialRequestTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webauth/Fido2CredentialRequestTest.java
index 46fd720..cfff13a52 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webauth/Fido2CredentialRequestTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webauth/Fido2CredentialRequestTest.java
@@ -431,16 +431,19 @@
                 Assert.assertEquals(mExpectedCredentialList.size(), credentialList.size());
                 for (int i = 0; i < credentialList.size(); i++) {
                     Assert.assertEquals(
-                            mExpectedCredentialList.get(0).mUserName,
-                            credentialList.get(0).mUserName);
+                            mExpectedCredentialList.get(i).mUserName,
+                            credentialList.get(i).mUserName);
                     Assert.assertEquals(
-                            mExpectedCredentialList.get(0).mUserDisplayName,
-                            credentialList.get(0).mUserDisplayName);
+                            mExpectedCredentialList.get(i).mUserDisplayName,
+                            credentialList.get(i).mUserDisplayName);
                     Assert.assertArrayEquals(
-                            mExpectedCredentialList.get(0).mCredentialId,
-                            credentialList.get(0).mCredentialId);
+                            mExpectedCredentialList.get(i).mCredentialId,
+                            credentialList.get(i).mCredentialId);
                     Assert.assertArrayEquals(
-                            mExpectedCredentialList.get(0).mUserId, credentialList.get(0).mUserId);
+                            mExpectedCredentialList.get(i).mUserId, credentialList.get(i).mUserId);
+                    Assert.assertEquals(
+                            mExpectedCredentialList.get(i).mLastUsedTimeMs,
+                            credentialList.get(i).mLastUsedTimeMs);
                 }
             }
 
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ai/AiAssistantServiceUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ai/AiAssistantServiceUnitTest.java
index 886c906..1d12ed95 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/ai/AiAssistantServiceUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/ai/AiAssistantServiceUnitTest.java
@@ -77,6 +77,7 @@
 import org.chromium.components.signin.identitymanager.IdentityManager;
 import org.chromium.content_public.browser.RenderFrameHost;
 import org.chromium.content_public.browser.WebContents;
+import org.chromium.google_apis.gaia.GaiaId;
 import org.chromium.ui.base.TestActivity;
 import org.chromium.ui.widget.ToastManager;
 import org.chromium.url.JUnitTestGURLs;
@@ -104,7 +105,6 @@
     @Mock private Profile mProfile;
     @Mock private IdentityServicesProvider mIdentityServicesProvider;
     @Mock private IdentityManager mIdentityManager;
-    @Mock private CoreAccountInfo mAccountInfo;
     @Mock SystemAiProvider mSystemAiProvider;
     @Mock SystemAiProviderFactory mSystemAiProviderFactory;
     @Mock private InnerTextBridge.Natives mInnerTextNatives;
@@ -578,11 +578,12 @@
     }
 
     private void setClientEmail(String email) {
-        when(mIdentityManager.getPrimaryAccountInfo(anyInt())).thenReturn(mAccountInfo);
-        when(mAccountInfo.getEmail()).thenReturn(email);
+        CoreAccountInfo accountInfo =
+                CoreAccountInfo.createFromEmailAndGaiaId(email, new GaiaId("test-gaia-id"));
+        when(mIdentityManager.getPrimaryAccountInfo(anyInt())).thenReturn(accountInfo);
         AccountManagerFacadeProvider.setInstanceForTests(mMockFacade);
         mCapabilitiesPromise = new Promise<>();
-        doReturn(mCapabilitiesPromise).when(mMockFacade).getAccountCapabilities(mAccountInfo);
+        doReturn(mCapabilitiesPromise).when(mMockFacade).getAccountCapabilities(accountInfo);
     }
 
     private void assertLaunchRequestIsForSummarizeUrl(
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStackerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStackerUnitTest.java
index 004e2e70..f124c47f 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStackerUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollingStripStackerUnitTest.java
@@ -29,7 +29,6 @@
     private static final float OFFSET_Y = 2;
     private static final float WIDTH = 100;
     private static final float FIRST_VIEW_IDEAL_X = -WIDTH - 1;
-    private static final float CACHED_TAB_WIDTH = 30;
 
     private final ScrollingStripStacker mTarget = new ScrollingStripStacker();
     @Mock private StripLayoutTab mView1;
@@ -110,8 +109,7 @@
         mTarget.pushDrawPropertiesToViews(mInput, WIDTH / 2, 2 * WIDTH);
 
         // Move the window with xOffset = TAB_WIDTH / 2, will make both up to TAB_2 and TAB_4
-        // partially
-        // invisible. TAB_5 will still be invisible in this case.
+        // partially invisible. TAB_5 will still be invisible in this case.
         verifyViews(Arrays.asList(mView1, mView5));
     }
 }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java
index acabee2..adf4d669 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManagerTest.java
@@ -737,7 +737,7 @@
 
         // Invoke the method.
         mStripLayoutHelperManager.getUpdatedSceneOverlayTree(
-                new RectF(), new RectF(), mRenderHost.getResourceManager(), 0f);
+                new RectF(), new RectF(), mRenderHost.getResourceManager());
 
         // Verify the call to #pushAndUpdateStrip.
         verify(mTabStripTreeProvider)
@@ -790,6 +790,7 @@
         mStripLayoutHelperManager.setTabStripTreeProviderForTesting(mTabStripTreeProvider);
 
         float yOffset = 10;
+        doReturn((int) yOffset).when(mBrowserControlStateProvider).getTopControlOffset();
         // With tab strip transition, the yOffset will be forced to be 0.
         mTabStripHeightSupplier.set(0);
         mStripLayoutHelperManager.onHeightChanged(0, /* applyScrimOverlay= */ true);
@@ -798,7 +799,7 @@
                 StripLayoutHelperManager.TAB_STRIP_TRANSITION_INTERPOLATOR.getInterpolation(
                         progress);
         mStripLayoutHelperManager.getUpdatedSceneOverlayTree(
-                new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset);
+                new RectF(), new RectF(), mRenderHost.getResourceManager());
         verify(mTabStripTreeProvider)
                 .pushAndUpdateStrip(
                         any(),
@@ -819,7 +820,7 @@
         // tab strip height.
         mStripLayoutHelperManager.onHeightTransitionFinished();
         mStripLayoutHelperManager.getUpdatedSceneOverlayTree(
-                new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset);
+                new RectF(), new RectF(), mRenderHost.getResourceManager());
         verify(mTabStripTreeProvider)
                 .pushAndUpdateStrip(
                         any(),
@@ -976,8 +977,9 @@
 
         // The yOffset will be forced to be reduced by the tab strip height to be kept invisible.
         float yOffset = -10;
+        doReturn((int) yOffset).when(mBrowserControlStateProvider).getTopControlOffset();
         mStripLayoutHelperManager.getUpdatedSceneOverlayTree(
-                new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset);
+                new RectF(), new RectF(), mRenderHost.getResourceManager());
         verify(mTabStripTreeProvider)
                 .pushAndUpdateStrip(
                         any(),
@@ -1004,7 +1006,7 @@
                 StripLayoutHelperManager.TAB_STRIP_TRANSITION_INTERPOLATOR.getInterpolation(
                         progress);
         mStripLayoutHelperManager.getUpdatedSceneOverlayTree(
-                new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset);
+                new RectF(), new RectF(), mRenderHost.getResourceManager());
         verify(mTabStripTreeProvider)
                 .pushAndUpdateStrip(
                         any(),
@@ -1025,7 +1027,7 @@
         // the layer should be offset to 0.
         mStripLayoutHelperManager.onHeightTransitionFinished();
         mStripLayoutHelperManager.getUpdatedSceneOverlayTree(
-                new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset);
+                new RectF(), new RectF(), mRenderHost.getResourceManager());
         verify(mTabStripTreeProvider)
                 .pushAndUpdateStrip(
                         any(),
@@ -1486,8 +1488,9 @@
         doReturn(false).when(mBrowserControlStateProvider).isVisibilityForced();
 
         float yOffset = 10;
+        doReturn((int) yOffset).when(mBrowserControlStateProvider).getTopControlOffset();
         mStripLayoutHelperManager.getUpdatedSceneOverlayTree(
-                new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset);
+                new RectF(), new RectF(), mRenderHost.getResourceManager());
 
         // When visibility isn't forced, and when we're not in a height transition, the offset
         // should always be 0, to position the controls at their fully visible positions.
@@ -1509,7 +1512,7 @@
 
         doReturn(true).when(mBrowserControlStateProvider).isVisibilityForced();
         mStripLayoutHelperManager.getUpdatedSceneOverlayTree(
-                new RectF(), new RectF(), mRenderHost.getResourceManager(), yOffset);
+                new RectF(), new RectF(), mRenderHost.getResourceManager());
 
         // When visibility is forced, use the provided offset.
         verify(mTabStripTreeProvider)
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStackerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStackerUnitTest.java
index e45106a..77e251936 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStackerUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStackerUnitTest.java
@@ -78,9 +78,9 @@
     @Test
     public void testComputeNewTabButtonIdealXRtl() {
         LocalizationUtils.setRtlForTesting(true);
-        float expected_res = 3f;
+        float expectedRes = 3f;
         // Update drawX for RTL = ((mInput.length -1 ) * TAB_WIDTH) + BUTTON_WIDTH +
-        // expected_res = 4*25 + 10 + 3
+        // expectedRes = 4*25 + 10 + 3
         float drawX = 113f;
         for (StripLayoutTab tab : mInput) {
             when(tab.getDrawX()).thenReturn(drawX);
@@ -95,7 +95,7 @@
                         STRIP_WIDTH,
                         BUTTON_WIDTH,
                         /* tabStripFull= */ true);
-        assertThat("New Tab button offset does not match", result, is(expected_res));
+        assertThat("New Tab button offset does not match", result, is(expectedRes));
     }
 
     @Test
@@ -120,6 +120,6 @@
 
         @Override
         public void pushDrawPropertiesToViews(
-                StripLayoutView[] indexOrderedViews, float xOffset, float visibleWidth) {}
+                StripLayoutView[] indexOrderedViews, float leftBound, float rightBound) {}
     }
 }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorUnitTest.java
index bb30abcc..3c5af767 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorUnitTest.java
@@ -45,8 +45,8 @@
 import org.chromium.base.test.util.Feature;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.IdentityManager;
+import org.chromium.components.signin.test.util.TestAccounts;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -61,13 +61,11 @@
     @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock private Activity mActivity;
     @Mock private Profile mProfile;
-    @Mock private CoreAccountInfo mAccountInfo;
 
     // Test constants.
     private static final String CATEGORY_TAG = "category_tag";
     private static final String DESCRIPTION = "description";
     private static final String FEEDBACK_CONTEXT = "feedback_context";
-    private static final String ACCOUNT_IN_USE = "foo@gmail.com";
     private static final String KEY_1 = "key1";
     private static final String KEY_2 = "key2";
     private static final String KEY_3 = "key3";
@@ -278,14 +276,13 @@
 
     @Before
     public void setUp() {
-        when(mAccountInfo.getEmail()).thenReturn(ACCOUNT_IN_USE);
         IdentityServicesProvider.setInstanceForTests(mock(IdentityServicesProvider.class));
         when(IdentityServicesProvider.get().getIdentityManager(any()))
                 .thenReturn(mock(IdentityManager.class));
         when(IdentityServicesProvider.get()
                         .getIdentityManager(any())
                         .getPrimaryAccountInfo(anyInt()))
-                .thenReturn(mAccountInfo);
+                .thenReturn(TestAccounts.ACCOUNT1);
     }
 
     @Test
@@ -384,7 +381,7 @@
                     assertEquals(CATEGORY_TAG, collector.getCategoryTag());
                     assertEquals(DESCRIPTION, collector.getDescription());
                     assertNull(collector.getScreenshot());
-                    assertEquals(ACCOUNT_IN_USE, collector.getAccountInUse());
+                    assertEquals(TestAccounts.ACCOUNT1.getEmail(), collector.getAccountInUse());
                 });
     }
 
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java
index 6cb0d54..53d40ec 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollectorTest.java
@@ -37,8 +37,8 @@
 import org.chromium.base.test.util.Feature;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.IdentityManager;
+import org.chromium.components.signin.test.util.TestAccounts;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -54,7 +54,6 @@
     // Enable the Features class, so we can override command line switches in the test.
     @Mock private Activity mActivity;
     @Mock private Profile mProfile;
-    @Mock private CoreAccountInfo mAccountInfo;
 
     // Test constants.
     private static final String CATEGORY_TAG = "category_tag";
@@ -113,14 +112,13 @@
     @Before
     public void setUp() {
         ThreadUtils.setUiThread(Looper.getMainLooper());
-        when(mAccountInfo.getEmail()).thenReturn(null);
         IdentityServicesProvider.setInstanceForTests(mock(IdentityServicesProvider.class));
         when(IdentityServicesProvider.get().getIdentityManager(any()))
                 .thenReturn(mock(IdentityManager.class));
         when(IdentityServicesProvider.get()
                         .getIdentityManager(any())
                         .getPrimaryAccountInfo(anyInt()))
-                .thenReturn(mAccountInfo);
+                .thenReturn(TestAccounts.ACCOUNT1);
     }
 
     @Test
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinatorUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinatorUnitTest.java
index df4e4a4c..56093fd 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinatorUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/notifications/tips/TipsPromoCoordinatorUnitTest.java
@@ -282,7 +282,7 @@
 
         mView.findViewById(R.id.tips_promo_settings_button).performClick();
         verify(mBottomSheetController).hideContent(any(), eq(true));
-        verify(mSettingsNavigation).startSettings(eq(mActivity), any());
+        verify(mSettingsNavigation).startSettings(eq(mActivity), any(), any());
 
         histogramWatcher.assertExpected();
     }
diff --git a/chrome/android/profiles/arm.newest.txt b/chrome/android/profiles/arm.newest.txt
index 14a177fa..09c10ff 100644
--- a/chrome/android/profiles/arm.newest.txt
+++ b/chrome/android/profiles/arm.newest.txt
@@ -1 +1 @@
-chromeos-chrome-arm-144.0.7530.0_pre1545745_rc-r1-merged.afdo.bz2
+chromeos-chrome-arm-144.0.7532.0_pre1546354_rc-r1-merged.afdo.bz2
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index 924fd33..aeacd076 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-144.0.7530.0_pre1545745_rc-r1-merged.afdo.bz2
+chromeos-chrome-amd64-144.0.7532.0_pre1546354_rc-r1-merged.afdo.bz2
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 609dbda8d..7a42be7a 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -17366,14 +17366,12 @@
     </if>
 
     <!-- Download open confirmation dialog -->
-    <if expr="not is_android">
-      <message name="IDS_DOWNLOAD_OPEN_CONFIRMATION_DIALOG_TITLE" desc="Title of the dialog prompt shown to users when an extension is trying to open a downloaded file.">
-        Open download
-      </message>
-      <message name="IDS_DOWNLOAD_OPEN_CONFIRMATION_DIALOG_MESSAGE" desc="Text of the message of the download open confirmation dialog.">
-        Allow <ph name="EXTENSION_NAME">$1<ex>Download Viewer</ex></ph> to open <ph name="FILE_NAME">$2<ex>abc.jpg</ex></ph>?
-      </message>
-    </if>
+    <message name="IDS_DOWNLOAD_OPEN_CONFIRMATION_DIALOG_TITLE" desc="Title of the dialog prompt shown to users when an extension is trying to open a downloaded file.">
+      Open download
+    </message>
+    <message name="IDS_DOWNLOAD_OPEN_CONFIRMATION_DIALOG_MESSAGE" desc="Text of the message of the download open confirmation dialog.">
+      Allow <ph name="EXTENSION_NAME">$1<ex>Download Viewer</ex></ph> to open <ph name="FILE_NAME">$2<ex>abc.jpg</ex></ph>?
+    </message>
 
     <message name="IDS_CONFIRM_FILE_UPLOAD_TITLE" desc="Title of dialog for confirming that many files are about to be uploaded / given to the site. [ICU Syntax]">
       {0, plural,
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 3cea657..6453cc3 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -462,6 +462,8 @@
     "enterprise/core/dependency_factory_impl.h",
     "enterprise/data_protection/view_source_navigation_throttle.cc",
     "enterprise/data_protection/view_source_navigation_throttle.h",
+    "enterprise/encryption/cache_encryption_provider_impl.cc",
+    "enterprise/encryption/cache_encryption_provider_impl.h",
     "enterprise/identifiers/profile_id_delegate_impl.cc",
     "enterprise/identifiers/profile_id_delegate_impl.h",
     "enterprise/identifiers/profile_id_service_factory.cc",
@@ -929,8 +931,6 @@
     "page_load_metrics/observers/webui_page_load_metrics_observer.h",
     "page_load_metrics/page_load_metrics_initialize.cc",
     "page_load_metrics/page_load_metrics_initialize.h",
-    "page_load_metrics/page_load_metrics_memory_tracker_factory.cc",
-    "page_load_metrics/page_load_metrics_memory_tracker_factory.h",
     "password_manager/account_password_store_factory.cc",
     "password_manager/chrome_password_change_service.cc",
     "password_manager/chrome_password_change_service.h",
@@ -3797,8 +3797,6 @@
       "download/download_dir_policy_handler.h",
       "download/download_dir_util.cc",
       "download/download_dir_util.h",
-      "download/download_open_dialog.cc",
-      "download/download_open_dialog.h",
       "download/download_ui_enterprise_util.cc",
       "download/download_ui_enterprise_util.h",
       "download/download_warning_desktop_hats_utils.cc",
@@ -6513,6 +6511,7 @@
       "//chrome/browser/webnn",
       "//chrome/browser/win:cloud_synced_folder_checker",
       "//chrome/browser/win:mica_titlebar",
+      "//chrome/browser/win:registry_watcher",
       "//chrome/browser/win/conflicts:module_info",
       "//chrome/chrome_elf:constants",
       "//chrome/chrome_elf:dll_hash",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index a2e7bd62..7ee0ac31 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -5123,6 +5123,35 @@
 };
 #endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
 
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
+const FeatureEntry::FeatureParam
+    kProfileCreationFrictionReductionRemoveSigninStep[] = {
+        {"profile-creation-friction-reduction-variation",
+         "remove-signin-step"}};
+const FeatureEntry::FeatureParam
+    kProfileCreationFrictionReductionPrefillNameRequirement[] = {
+        {"profile-creation-friction-reduction-variation",
+         "prefill-name-requirement"}};
+const FeatureEntry::FeatureParam
+    kProfileCreationFrictionReductionSkipCustomizeProfileStep[] = {
+        {"profile-creation-friction-reduction-variation",
+         "skip-customize-profile-step"}};
+
+const FeatureEntry::FeatureVariation
+    kProfileCreationFrictionReductionVariations[] = {
+        {"- Remove sign-in step",
+         kProfileCreationFrictionReductionRemoveSigninStep,
+         std::size(kProfileCreationFrictionReductionRemoveSigninStep), nullptr},
+        {"- Prefill profile name requirement",
+         kProfileCreationFrictionReductionPrefillNameRequirement,
+         std::size(kProfileCreationFrictionReductionPrefillNameRequirement),
+         nullptr},
+        {"- Skip customize profile step",
+         kProfileCreationFrictionReductionSkipCustomizeProfileStep,
+         std::size(kProfileCreationFrictionReductionSkipCustomizeProfileStep),
+         nullptr}};
+#endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
+
 #if BUILDFLAG(IS_ANDROID)
 const FeatureEntry::FeatureParam kAndroidDesktopZoomScalingFactorSmall[] = {
     {"desktop-zoom-scaling-factor", "109"},
@@ -7524,15 +7553,6 @@
          kPageContentAnnotationsVariations,
          "PageContentAnnotations")},
 
-    {"page-content-annotations-persist-salient-image-metadata",
-     flag_descriptions::kPageContentAnnotationsPersistSalientImageMetadataName,
-     flag_descriptions::
-         kPageContentAnnotationsPersistSalientImageMetadataDescription,
-     kOsDesktop,
-     FEATURE_VALUE_TYPE(
-         page_content_annotations::features::
-             kPageContentAnnotationsPersistSalientImageMetadata)},
-
     {"page-content-annotations-remote-page-metadata",
      flag_descriptions::kPageContentAnnotationsRemotePageMetadataName,
      flag_descriptions::kPageContentAnnotationsRemotePageMetadataDescription,
@@ -13404,6 +13424,17 @@
 #endif
 
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
+    {"profile-creation-friction-reduction-experiment",
+     flag_descriptions::kProfileCreationFrictionReductionExperimentName,
+     flag_descriptions::kProfileCreationFrictionReductionExperimentDescription,
+     kOsLinux | kOsMac | kOsWin,
+     FEATURE_WITH_PARAMS_VALUE_TYPE(
+         switches::kProfileCreationFrictionReductionExperiment,
+         kProfileCreationFrictionReductionVariations,
+         "ProfileCreationFrictionReductionExperiment")},
+#endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
+
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
     {"profile-picker-text-variations",
      flag_descriptions::kProfilePickerTextVariationsName,
      flag_descriptions::kProfilePickerTextVariationsDescription,
diff --git a/chrome/browser/accessibility/media_app/ax_media_app_untrusted_service.cc b/chrome/browser/accessibility/media_app/ax_media_app_untrusted_service.cc
index 5d19607..d07716b 100644
--- a/chrome/browser/accessibility/media_app/ax_media_app_untrusted_service.cc
+++ b/chrome/browser/accessibility/media_app/ax_media_app_untrusted_service.cc
@@ -493,6 +493,7 @@
     case ax::mojom::Action::kStopDuckingMedia:
     case ax::mojom::Action::kSuspendMedia:
     case ax::mojom::Action::kLongClick:
+    case ax::mojom::Action::kRequestLayoutBasedAction:
       NOTIMPLEMENTED();
       return;
   }
diff --git a/chrome/browser/actor/tools/attempt_login_tool_interactive_ui_test.cc b/chrome/browser/actor/tools/attempt_login_tool_interactive_ui_test.cc
index a6b31f4..763570f 100644
--- a/chrome/browser/actor/tools/attempt_login_tool_interactive_ui_test.cc
+++ b/chrome/browser/actor/tools/attempt_login_tool_interactive_ui_test.cc
@@ -334,8 +334,10 @@
   EXPECT_TRUE(mock_login_service().last_permission_was_permanent());
 }
 
-// TODO(https://crbug.com/456675144): Flaky on asan and Wayland.
-#if defined(ADDRESS_SANITIZER) || defined(IS_LINUX)
+// TODO(https://crbug.com/456675144): Flaky on asan.
+// This test does not work on Wayland, but setting SetOnIncompatibleAction does
+// not seem to skip the test, so we just disable on linux for now.
+#if defined(ADDRESS_SANITIZER) || BUILDFLAG(IS_LINUX)
 #define MAYBE_HandleReauth DISABLED_HandleReauth
 #else
 #define MAYBE_HandleReauth HandleReauth
diff --git a/chrome/browser/actor/tools/select_tool_interactive_ui_test.cc b/chrome/browser/actor/tools/select_tool_interactive_ui_test.cc
index d2c1247..6cd54f2 100644
--- a/chrome/browser/actor/tools/select_tool_interactive_ui_test.cc
+++ b/chrome/browser/actor/tools/select_tool_interactive_ui_test.cc
@@ -39,32 +39,32 @@
 // shown, the UI thread is blocked. See `PopupMenuHelper::ShowPopupMenu()`.
 // Disable this test on Mac for now until there is a test-only PopupMenuHelper
 // that's not blocking.
-//
-// TODO(crbug.com/439317652): this is flaky on all platforms.
 IN_PROC_BROWSER_TEST_F(ActorSelectToolBrowserTest,
-                       DISABLED_SelectToolCloseDropDownMenu) {
+                       SelectToolCloseDropDownMenu) {
   const GURL url = embedded_test_server()->GetURL("/actor/select_tool.html");
   ASSERT_TRUE(content::NavigateToURL(web_contents(), url));
-  SimulateEndOfPaintHoldingOnPrimaryMainFrame(web_contents());
-
-  // Click on the dropdown menu.
   content::ShowPopupWidgetWaiter new_popup_waiter(
       web_contents(), web_contents()->GetPrimaryMainFrame());
-  content::SimulateMouseClickAt(
-      web_contents(), /*modifiers=*/0, blink::WebMouseEvent::Button::kLeft,
-      gfx::ToFlooredPoint(
-          GetCenterCoordinatesOfElementWithId(web_contents(), "plainSelect")));
+
+  // Click on the dropdown menu.
+  std::unique_ptr<ToolRequest> click_action = MakeClickRequest(
+      *active_tab(), gfx::ToFlooredPoint(GetCenterCoordinatesOfElementWithId(
+                         web_contents(), "plainSelect")));
+  ActResultFuture click_result;
+  actor_task().Act(ToRequestList(click_action), click_result.GetCallback());
+  ExpectOkResult(click_result);
+
   new_popup_waiter.Wait();
   ASSERT_FALSE(new_popup_waiter.last_initial_rect().IsEmpty());
 
   // Wait for the dropdown to close.
   const int32_t plain_select_dom_node_id =
       GetDOMNodeId(*main_frame(), "#plainSelect").value();
-  std::unique_ptr<ToolRequest> action =
+  std::unique_ptr<ToolRequest> select_action =
       MakeSelectRequest(*main_frame(), plain_select_dom_node_id, "beta");
-  ActResultFuture result;
-  actor_task().Act(ToRequestList(action), result.GetCallback());
-  ExpectOkResult(result);
+  ActResultFuture select_result;
+  actor_task().Act(ToRequestList(select_action), select_result.GetCallback());
+  ExpectOkResult(select_result);
   ASSERT_TRUE(base::test::RunUntil(
       [&]() { return GetPopupWidgets(web_contents()).empty(); }));
 }
diff --git a/chrome/browser/actor/ui/BUILD.gn b/chrome/browser/actor/ui/BUILD.gn
index 8cf181d..4c4b3062 100644
--- a/chrome/browser/actor/ui/BUILD.gn
+++ b/chrome/browser/actor/ui/BUILD.gn
@@ -82,6 +82,7 @@
   public = [
     "states/actor_overlay_state.h",
     "states/handoff_button_state.h",
+    "states/tab_indicator_state.h",
   ]
 
   public_deps = [ "//chrome/browser/actor:types" ]
diff --git a/chrome/browser/actor/ui/actor_ui_state_manager.cc b/chrome/browser/actor/ui/actor_ui_state_manager.cc
index 61249b19..7019cdc 100644
--- a/chrome/browser/actor/ui/actor_ui_state_manager.cc
+++ b/chrome/browser/actor/ui/actor_ui_state_manager.cc
@@ -40,7 +40,17 @@
   static const UiTabState kActorState = {
       .actor_overlay = {.is_active = true, .border_glow_visible = true},
       .handoff_button = {.is_active = true, .controller = kActor},
-      .tab_indicator_visible = true,
+      .tab_indicator = TabIndicatorStatus::kDynamic,
+      .border_glow_visible = true,
+  };
+  return kActorState;
+}
+
+const UiTabState& GetWaitingOnUserUiTabState() {
+  static const UiTabState kActorState = {
+      .actor_overlay = {.is_active = true, .border_glow_visible = true},
+      .handoff_button = {.is_active = true, .controller = kActor},
+      .tab_indicator = TabIndicatorStatus::kStatic,
       .border_glow_visible = true,
   };
   return kActorState;
@@ -52,7 +62,7 @@
       .handoff_button = {.is_active = !base::FeatureList::IsEnabled(
                              features::kGlicHandoffButtonHiddenClientControl),
                          .controller = kClient},
-      .tab_indicator_visible = false,
+      .tab_indicator = TabIndicatorStatus::kNone,
       .border_glow_visible = false,
   };
   return kPausedState;
@@ -62,7 +72,7 @@
   static const UiTabState kCompletedState = {
       .actor_overlay = {.is_active = false, .border_glow_visible = false},
       .handoff_button = {.is_active = false, .controller = kClient},
-      .tab_indicator_visible = false,
+      .tab_indicator = TabIndicatorStatus::kNone,
       .border_glow_visible = false,
   };
   return kCompletedState;
@@ -136,9 +146,11 @@
           << "Task state should never be set to kCreated from another state.";
     case ActorTask::State::kActing:
     case ActorTask::State::kReflecting:
-    case ActorTask::State::kWaitingOnUser:
       ui_tab_state = GetActorControlledUiTabState();
       break;
+    case ActorTask::State::kWaitingOnUser:
+      ui_tab_state = GetWaitingOnUserUiTabState();
+      break;
     case ActorTask::State::kPausedByUser:
     case ActorTask::State::kPausedByActor:
       ui_tab_state = GetPausedUiTabState();
diff --git a/chrome/browser/actor/ui/actor_ui_state_manager_unittest.cc b/chrome/browser/actor/ui/actor_ui_state_manager_unittest.cc
index 15e61b2..6caa145 100644
--- a/chrome/browser/actor/ui/actor_ui_state_manager_unittest.cc
+++ b/chrome/browser/actor/ui/actor_ui_state_manager_unittest.cc
@@ -216,47 +216,54 @@
      UiTabState{
          .actor_overlay = {.is_active = true, .border_glow_visible = true},
          .handoff_button = {.is_active = true, .controller = kActor},
-         .tab_indicator_visible = true,
+         .tab_indicator = TabIndicatorStatus::kDynamic,
          .border_glow_visible = true,
      }},
     {ActorTask::State::kReflecting,
      UiTabState{
          .actor_overlay = {.is_active = true, .border_glow_visible = true},
          .handoff_button = {.is_active = true, .controller = kActor},
-         .tab_indicator_visible = true,
+         .tab_indicator = TabIndicatorStatus::kDynamic,
+         .border_glow_visible = true,
+     }},
+    {ActorTask::State::kWaitingOnUser,
+     UiTabState{
+         .actor_overlay = {.is_active = true, .border_glow_visible = true},
+         .handoff_button = {.is_active = true, .controller = kActor},
+         .tab_indicator = TabIndicatorStatus::kStatic,
          .border_glow_visible = true,
      }},
     {ActorTask::State::kPausedByActor,
      UiTabState{
          .actor_overlay = {.is_active = false, .border_glow_visible = false},
          .handoff_button = {.is_active = false, .controller = kClient},
-         .tab_indicator_visible = false,
+         .tab_indicator = TabIndicatorStatus::kNone,
          .border_glow_visible = false,
      }},
     {ActorTask::State::kPausedByUser,
      UiTabState{
          .actor_overlay = {.is_active = false, .border_glow_visible = false},
          .handoff_button = {.is_active = false, .controller = kClient},
-         .tab_indicator_visible = false,
+         .tab_indicator = TabIndicatorStatus::kNone,
          .border_glow_visible = false,
      }},
     {ActorTask::State::kCancelled,
      UiTabState{
          .actor_overlay = {.is_active = false, .border_glow_visible = false},
          .handoff_button = {.is_active = false},
-         .tab_indicator_visible = false,
+         .tab_indicator = TabIndicatorStatus::kNone,
      }},
     {ActorTask::State::kFailed,
      UiTabState{
          .actor_overlay = {.is_active = false, .border_glow_visible = false},
          .handoff_button = {.is_active = false},
-         .tab_indicator_visible = false,
+         .tab_indicator = TabIndicatorStatus::kNone,
      }},
     {ActorTask::State::kFinished,
      UiTabState{
          .actor_overlay = {.is_active = false, .border_glow_visible = false},
          .handoff_button = {.is_active = false},
-         .tab_indicator_visible = false,
+         .tab_indicator = TabIndicatorStatus::kNone,
          .border_glow_visible = false,
      }}};
 
@@ -285,7 +292,7 @@
   UiTabState expected_ui_tab_state{
       .actor_overlay = {.is_active = true, .border_glow_visible = true},
       .handoff_button = {.is_active = true, .controller = kActor},
-      .tab_indicator_visible = true,
+      .tab_indicator = TabIndicatorStatus::kDynamic,
       .border_glow_visible = true,
   };
   VerifyUiEvent(StartingToActOnTab{mock_tab().GetHandle(), TaskId(123)},
@@ -297,7 +304,7 @@
   UiTabState expected_ui_tab_state{
       .actor_overlay = {.is_active = false},
       .handoff_button = {.is_active = false},
-      .tab_indicator_visible = false,
+      .tab_indicator = TabIndicatorStatus::kNone,
       .border_glow_visible = false,
   };
   VerifyUiEvent(StoppedActingOnTab{mock_tab().GetHandle()},
@@ -312,7 +319,7 @@
                         .mouse_down = false,
                         .mouse_target = gfx::Point(100, 200)},
       .handoff_button = {.is_active = true, .controller = kActor},
-      .tab_indicator_visible = true,
+      .tab_indicator = TabIndicatorStatus::kDynamic,
       .border_glow_visible = true,
   };
   VerifyUiEvent(MouseMove{mock_tab().GetHandle(), gfx::Point(100, 200),
@@ -327,7 +334,7 @@
                         .border_glow_visible = true,
                         .mouse_down = true},
       .handoff_button = {.is_active = true, .controller = kActor},
-      .tab_indicator_visible = true,
+      .tab_indicator = TabIndicatorStatus::kDynamic,
       .border_glow_visible = true,
   };
   VerifyUiEvent(MouseClick{mock_tab().GetHandle(), MouseClickType::kLeft,
diff --git a/chrome/browser/actor/ui/actor_ui_tab_controller.cc b/chrome/browser/actor/ui/actor_ui_tab_controller.cc
index d657bba..c485445 100644
--- a/chrome/browser/actor/ui/actor_ui_tab_controller.cc
+++ b/chrome/browser/actor/ui/actor_ui_tab_controller.cc
@@ -88,11 +88,6 @@
   UpdateUi(std::move(callback));
 }
 
-bool ActorUiTabController::ShouldShowActorTabIndicator() {
-  return features::kGlicActorUiTabIndicator.Get() &&
-         should_show_actor_tab_indicator_;
-}
-
 void ActorUiTabController::OnTabWillDetach(
     tabs::TabInterface* tab_interface,
     tabs::TabInterface::DetachReason reason) {
@@ -167,17 +162,16 @@
 }
 
 void ActorUiTabController::SetActorTabIndicatorVisibility(
-    bool should_show_tab_indicator,
+    TabIndicatorStatus tab_indicator_status,
     base::OnceClosure callback) {
   // When GLIC isn't enabled, we never set the tab indicator.
-  // TODO(crbug.com/422538779) remove GLIC dependency once the ACTOR_ACCESSING
+  // TODO(crbug.com/461457730) remove GLIC dependency once the ACTOR_ACCESSING
   // alert migrates away from the GLIC_ACCESSING resources.
 #if BUILDFLAG(ENABLE_GLIC)
-  if (should_show_actor_tab_indicator_ != should_show_tab_indicator) {
-    should_show_actor_tab_indicator_ = should_show_tab_indicator;
+  if (tab_indicator_ != tab_indicator_status) {
+    tab_indicator_ = tab_indicator_status;
     if (on_actor_tab_indicator_changed_callback_) {
-      on_actor_tab_indicator_changed_callback_.Run(
-          should_show_actor_tab_indicator_);
+      on_actor_tab_indicator_changed_callback_.Run(tab_indicator_);
       // Notify tab strip model of state change.
       tab_->GetBrowserWindowInterface()->GetTabStripModel()->NotifyTabChanged(
           base::to_address(tab_), TabChangeType::kAll);
@@ -218,7 +212,7 @@
   }
   // Tab Indicator
   if (features::kGlicActorUiTabIndicator.Get()) {
-    SetActorTabIndicatorVisibility(current_ui_tab_state_.tab_indicator_visible,
+    SetActorTabIndicatorVisibility(current_ui_tab_state_.tab_indicator,
                                    concurrent_closures.CreateClosure());
   }
   // Border Glow
diff --git a/chrome/browser/actor/ui/actor_ui_tab_controller.h b/chrome/browser/actor/ui/actor_ui_tab_controller.h
index ef320ca0..b689023 100644
--- a/chrome/browser/actor/ui/actor_ui_tab_controller.h
+++ b/chrome/browser/actor/ui/actor_ui_tab_controller.h
@@ -48,7 +48,6 @@
   void OnHandoffButtonHoverStatusChanged() override;
   void OnHandoffButtonFocusStatusChanged() override;
   UiTabState GetCurrentUiTabState() const override;
-  bool ShouldShowActorTabIndicator() override;
 
   // ImmersiveModeController::Observer
   void OnImmersiveFullscreenEntered() override;
@@ -92,7 +91,7 @@
   void OnUpdateFinished();
 
   // Sets the Tab Indicator visibility.
-  void SetActorTabIndicatorVisibility(bool should_show_tab_indicator,
+  void SetActorTabIndicatorVisibility(TabIndicatorStatus tab_indicator_status,
                                       base::OnceClosure callback);
 
   // Sets the Border Glow visibility.
@@ -151,7 +150,7 @@
   std::unique_ptr<HandoffButtonController> handoff_button_controller_;
   std::unique_ptr<ActorUiTabControllerFactoryInterface> controller_factory_;
 
-  bool should_show_actor_tab_indicator_ = false;
+  TabIndicatorStatus tab_indicator_ = TabIndicatorStatus::kNone;
   base::RetainingOneShotTimer update_scrim_background_debounce_timer_;
 
   ::ui::ScopedUnownedUserData<ActorUiTabController> scoped_unowned_user_data_;
diff --git a/chrome/browser/actor/ui/actor_ui_tab_controller_browsertest.cc b/chrome/browser/actor/ui/actor_ui_tab_controller_browsertest.cc
index e0dfc738..14071678 100644
--- a/chrome/browser/actor/ui/actor_ui_tab_controller_browsertest.cc
+++ b/chrome/browser/actor/ui/actor_ui_tab_controller_browsertest.cc
@@ -29,9 +29,11 @@
 #include "chrome/common/actor.mojom.h"
 #include "chrome/common/actor/task_id.h"
 #include "chrome/common/chrome_features.h"
+#include "chrome/common/webui_url_constants.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/tabs/public/tab_interface.h"
 #include "content/public/test/browser_test.h"
+#include "ui/base/page_transition_types.h"
 #include "ui/views/controls/animated_image_view.h"
 #include "url/gurl.h"
 
@@ -150,6 +152,75 @@
 }
 
 IN_PROC_BROWSER_TEST_F(ActorUiTabControllerTest,
+                       TabSpinnerNotVisibleWhenWaitingOnUser) {
+  // Start task on tab.
+  auto* actor_service = actor::ActorKeyedService::Get(browser()->GetProfile());
+  actor_service->GetPolicyChecker().SetActOnWebForTesting(true);
+  actor::TaskId task_id = actor_service->CreateTask();
+  actor::ActorTask* task = actor_service->GetTask(task_id);
+  actor::ui::StartTask start_task_event(task_id);
+  actor_service->GetActorUiStateManager()->OnUiEvent(start_task_event);
+  // Need to wait for the AUSM to notify the GlicActorTaskIconManager.
+  base::PlatformThread::Sleep(actor::ui::kProfileScopedUiUpdateDebounceDelay);
+
+  ASSERT_TRUE(AddTabAtIndexToBrowser(browser(), 0,
+                                     GURL(chrome::kChromeUINewTabURL),
+                                     ::ui::PAGE_TRANSITION_LINK));
+  auto* tab_one = browser()->GetTabStripModel()->GetTabAtIndex(0);
+  base::RunLoop loop;
+  task->AddTab(
+      tab_one->GetHandle(),
+      base::BindLambdaForTesting([&](actor::mojom::ActionResultPtr result) {
+        EXPECT_TRUE(actor::IsOk(*result));
+        loop.Quit();
+      }));
+  loop.Run();
+
+  tabs::TabAlertController* const tab_alert_controller =
+      tabs::TabAlertController::From(tab_one);
+
+  // The indicator should be visible on the actuating tab.
+  EXPECT_TRUE(
+      tab_alert_controller->IsAlertActive(tabs::TabAlert::kActorAccessing));
+  ASSERT_NE(GetSpinner(), nullptr);
+  EXPECT_EQ(GetSpinner()->state(), views::AnimatedImageView::State::kPlaying);
+  EXPECT_TRUE(GetSpinner()->GetVisible());
+  EXPECT_FALSE(GetSpinner()->bounds().IsEmpty());
+  EXPECT_TRUE(GetSpinner()
+                  ->animated_image()
+                  ->GetPlaybackConfig()
+                  ->ignore_reduced_motion);
+
+  // Wait for user event.
+  actor_service->GetActorUiStateManager()->OnUiEvent(
+      actor::ui::TaskStateChanged(
+          task_id, actor::ActorTask::State::kWaitingOnUser, /*title=*/""));
+  // Need to wait for the AUSM to notify the GlicActorTaskIconManager.
+  base::PlatformThread::Sleep(actor::ui::kProfileScopedUiUpdateDebounceDelay);
+
+  // The static icon should be visible, but not the spinner.
+  EXPECT_TRUE(
+      tab_alert_controller->IsAlertActive(tabs::TabAlert::kActorWaitingOnUser));
+  EXPECT_FALSE(
+      tab_alert_controller->IsAlertActive(tabs::TabAlert::kActorAccessing));
+  EXPECT_EQ(GetSpinner()->state(), views::AnimatedImageView::State::kStopped);
+
+  // Restart the task
+  actor_service->GetActorUiStateManager()->OnUiEvent(
+      actor::ui::TaskStateChanged(task_id, actor::ActorTask::State::kActing,
+                                  /*title=*/""));
+  // Need to wait for the AUSM to notify the GlicActorTaskIconManager.
+  base::PlatformThread::Sleep(actor::ui::kProfileScopedUiUpdateDebounceDelay);
+
+  // State should return to before WaitingOnUser
+  EXPECT_TRUE(
+      tab_alert_controller->IsAlertActive(tabs::TabAlert::kActorAccessing));
+  ASSERT_NE(GetSpinner(), nullptr);
+  EXPECT_EQ(GetSpinner()->state(), views::AnimatedImageView::State::kPlaying);
+  EXPECT_TRUE(GetSpinner()->GetVisible());
+}
+
+IN_PROC_BROWSER_TEST_F(ActorUiTabControllerTest,
                        RecordsUserActionOnActiveStatusChange) {
   TaskId task_id = actor_keyed_service()->CreateTask();
 
diff --git a/chrome/browser/actor/ui/actor_ui_tab_controller_interface.h b/chrome/browser/actor/ui/actor_ui_tab_controller_interface.h
index d29d5da..d79a6c0 100644
--- a/chrome/browser/actor/ui/actor_ui_tab_controller_interface.h
+++ b/chrome/browser/actor/ui/actor_ui_tab_controller_interface.h
@@ -9,6 +9,7 @@
 #include "base/time/time.h"
 #include "chrome/browser/actor/ui/states/actor_overlay_state.h"
 #include "chrome/browser/actor/ui/states/handoff_button_state.h"
+#include "chrome/browser/actor/ui/states/tab_indicator_state.h"
 #include "chrome/common/actor/task_id.h"
 #include "components/tabs/public/tab_interface.h"
 #include "ui/base/unowned_user_data/scoped_unowned_user_data.h"
@@ -21,7 +22,7 @@
   bool operator==(const UiTabState& other) const = default;
   ActorOverlayState actor_overlay;
   HandoffButtonState handoff_button;
-  bool tab_indicator_visible = false;
+  TabIndicatorStatus tab_indicator = TabIndicatorStatus::kNone;
   // TODO(crbug.com/447114657) Deprecate the Tab Level border_glow_visible as it
   // is now part of the Overlay.
   bool border_glow_visible = false;
@@ -43,8 +44,8 @@
   return os << "UiTabState{\n"
             << "  actor_overlay: " << state.actor_overlay << ",\n"
             << "  handoff_button: " << state.handoff_button << "\n"
-            << "  tab_indicator_visible: " << state.tab_indicator_visible
-            << "\n"
+            << "  tab_indicator_status: "
+            << static_cast<int>(state.tab_indicator) << "\n"
             << "  border_glow_visible: " << state.border_glow_visible << "\n"
             << "}";
 }
@@ -93,9 +94,6 @@
   // Called when the focus status changes on the handoff button.
   virtual void OnHandoffButtonFocusStatusChanged() = 0;
 
-  // Returns whether the tab should show the actor tab indicator.
-  virtual bool ShouldShowActorTabIndicator() = 0;
-
   virtual base::WeakPtr<ActorUiTabControllerInterface> GetWeakPtr() = 0;
 
   // Retrieves an ActorUiTabControllerInterface from the provided tab, or
@@ -107,7 +105,7 @@
 
   // Callbacks:
   using ActorTabIndicatorStateChangedCallback =
-      base::RepeatingCallback<void(bool)>;
+      base::RepeatingCallback<void(TabIndicatorStatus)>;
   [[nodiscard]] virtual base::ScopedClosureRunner
   RegisterActorTabIndicatorStateChangedCallback(
       ActorTabIndicatorStateChangedCallback callback) = 0;
diff --git a/chrome/browser/actor/ui/actor_ui_tab_controller_unittest.cc b/chrome/browser/actor/ui/actor_ui_tab_controller_unittest.cc
index eb4ff95..5e1afe0 100644
--- a/chrome/browser/actor/ui/actor_ui_tab_controller_unittest.cc
+++ b/chrome/browser/actor/ui/actor_ui_tab_controller_unittest.cc
@@ -328,18 +328,20 @@
   HandoffButtonState handoff_button_state(
       true, HandoffButtonState::ControlOwnership::kActor);
   ActorOverlayState actor_overlay_state{.is_active = true};
-  UiTabState ui_tab_state_glow_on(actor_overlay_state, handoff_button_state,
-                                  /*tab_indicator_visible=*/false,
-                                  /*border_glow_visible=*/true);
+  UiTabState ui_tab_state_glow_on(
+      actor_overlay_state, handoff_button_state,
+      /*tab_indicator_visible=*/TabIndicatorStatus::kNone,
+      /*border_glow_visible=*/true);
 
   EXPECT_CALL(callback, Call(&mock_tab(), true));
   tab_controller()->OnUiTabStateChange(ui_tab_state_glow_on, base::DoNothing());
 
   testing::Mock::VerifyAndClearExpectations(&callback);
 
-  UiTabState ui_tab_state_glow_off(actor_overlay_state, handoff_button_state,
-                                   /*tab_indicator_visible=*/false,
-                                   /*border_glow_visible=*/false);
+  UiTabState ui_tab_state_glow_off(
+      actor_overlay_state, handoff_button_state,
+      /*tab_indicator_visible=*/TabIndicatorStatus::kNone,
+      /*border_glow_visible=*/false);
   EXPECT_CALL(callback, Call(&mock_tab(), false));
   tab_controller()->OnUiTabStateChange(ui_tab_state_glow_off,
                                        base::DoNothing());
@@ -541,7 +543,7 @@
   auto valid_overlay_state_cb =
       base::BindRepeating([](bool, ActorOverlayState, base::OnceClosure) {});
   auto valid_overlay_bg_cb = base::BindRepeating([](bool) {});
-  auto valid_tab_indicator_cb = base::BindRepeating([](bool) {});
+  auto valid_tab_indicator_cb = base::BindRepeating([](TabIndicatorStatus) {});
 
   // The test fixture's SetUpDefaultOverlayExpectations() method already
   // registers a default overlay callback. This verifies that attempting to
diff --git a/chrome/browser/actor/ui/mocks/mock_actor_ui_tab_controller.h b/chrome/browser/actor/ui/mocks/mock_actor_ui_tab_controller.h
index 8f5b759..3a714a4d 100644
--- a/chrome/browser/actor/ui/mocks/mock_actor_ui_tab_controller.h
+++ b/chrome/browser/actor/ui/mocks/mock_actor_ui_tab_controller.h
@@ -51,9 +51,8 @@
   MOCK_METHOD(void, OnHandoffButtonHoverStatusChanged, (), (override));
   MOCK_METHOD(void, OnHandoffButtonFocusStatusChanged, (), (override));
 
-  MOCK_METHOD(bool, ShouldShowActorTabIndicator, (), (override));
   using ActorTabIndicatorStateChangedCallback =
-      base::RepeatingCallback<void(bool)>;
+      base::RepeatingCallback<void(TabIndicatorStatus)>;
   MOCK_METHOD(base::ScopedClosureRunner,
               RegisterActorTabIndicatorStateChangedCallback,
               (ActorTabIndicatorStateChangedCallback callback),
diff --git a/chrome/browser/actor/ui/states/tab_indicator_state.h b/chrome/browser/actor/ui/states/tab_indicator_state.h
new file mode 100644
index 0000000..ec641ad8
--- /dev/null
+++ b/chrome/browser/actor/ui/states/tab_indicator_state.h
@@ -0,0 +1,20 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ACTOR_UI_STATES_TAB_INDICATOR_STATE_H_
+#define CHROME_BROWSER_ACTOR_UI_STATES_TAB_INDICATOR_STATE_H_
+
+namespace actor::ui {
+// Enum for status of the tab indicator (icon to the right of the tab title).
+enum class TabIndicatorStatus {
+  // Not visible.
+  kNone,
+  // Icon visible. Spinner not visible.
+  kStatic,
+  // Spinner visible. Icon not visible.
+  kDynamic,
+};
+}  // namespace actor::ui
+
+#endif  // CHROME_BROWSER_ACTOR_UI_STATES_TAB_INDICATOR_STATE_H_
diff --git a/chrome/browser/actor/ui/task_list_bubble/actor_task_list_bubble_interactive_uitest.cc b/chrome/browser/actor/ui/task_list_bubble/actor_task_list_bubble_interactive_uitest.cc
index adf5432..95c2548 100644
--- a/chrome/browser/actor/ui/task_list_bubble/actor_task_list_bubble_interactive_uitest.cc
+++ b/chrome/browser/actor/ui/task_list_bubble/actor_task_list_bubble_interactive_uitest.cc
@@ -80,8 +80,14 @@
       InAnyContext(WaitForHide(kActorTaskListBubbleView)));
 }
 
+// TODO(crbug.com/458775033): Fix and re-enable this test on macOS.
+#if BUILDFLAG(IS_MAC)
+#define MAYBE_OnTaskInBubbleActuatesTab DISABLED_OnTaskInBubbleActuatesTab
+#else
+#define MAYBE_OnTaskInBubbleActuatesTab OnTaskInBubbleActuatesTab
+#endif
 IN_PROC_BROWSER_TEST_F(ActorTaskListBubbleInteractiveUiTest,
-                       ClickingOnTaskInBubbleActuatesTab) {
+                       MAYBE_OnTaskInBubbleActuatesTab) {
   // Anchor to top container for tests.
   views::View* anchor_view =
       BrowserView::GetBrowserViewForBrowser(browser())->top_container();
diff --git a/chrome/browser/ai/ai_on_device_browsertest.cc b/chrome/browser/ai/ai_on_device_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ai/ai_on_device_browsertest.cc
rename to chrome/browser/ai/ai_on_device_interactive_uitest.cc
diff --git a/chrome/browser/android/customtabs/branding/BUILD.gn b/chrome/browser/android/customtabs/branding/BUILD.gn
index 3c5494b7..fca851c 100644
--- a/chrome/browser/android/customtabs/branding/BUILD.gn
+++ b/chrome/browser/android/customtabs/branding/BUILD.gn
@@ -94,6 +94,7 @@
     "//components/feature_engagement/public:public_java",
     "//components/prefs/android:java",
     "//components/signin/public/android:java",
+    "//components/signin/public/android:signin_java_test_support",
     "//components/user_prefs/android:java",
     "//content/public/android:content_full_java",
     "//google_apis/gaia/android:java",
diff --git a/chrome/browser/android/customtabs/branding/java/src/org/chromium/chrome/browser/customtabs/features/branding/MismatchNotificationCheckerUnitTest.java b/chrome/browser/android/customtabs/branding/java/src/org/chromium/chrome/browser/customtabs/features/branding/MismatchNotificationCheckerUnitTest.java
index 6b06f36..fde8cb2 100644
--- a/chrome/browser/android/customtabs/branding/java/src/org/chromium/chrome/browser/customtabs/features/branding/MismatchNotificationCheckerUnitTest.java
+++ b/chrome/browser/android/customtabs/branding/java/src/org/chromium/chrome/browser/customtabs/features/branding/MismatchNotificationCheckerUnitTest.java
@@ -27,9 +27,8 @@
 import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.components.feature_engagement.Tracker;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.IdentityManager;
-import org.chromium.google_apis.gaia.GaiaId;
+import org.chromium.components.signin.test.util.TestAccounts;
 
 /** Unit test for {@link MismatchNotificationChecker} */
 @RunWith(BaseRobolectricTestRunner.class)
@@ -114,7 +113,6 @@
         private Profile mProfileMock;
         private Callback<Integer> mCallback;
         private IdentityManager mIdentityManager;
-        private CoreAccountInfo mCoreAccountInfo;
         private Callback<MismatchNotificationData> mOnClose;
 
         private final MismatchNotificationData.AppUiData mAppData =
@@ -129,10 +127,9 @@
             mIphDisplayLock = mock(Tracker.DisplayLockHandle.class);
             when(mTracker.acquireDisplayLock()).thenReturn(mIphDisplayLock);
 
-            mCoreAccountInfo = mock(CoreAccountInfo.class);
-            when(mCoreAccountInfo.getGaiaId()).thenReturn(new GaiaId("nice-gaia-id"));
             mIdentityManager = mock(IdentityManager.class);
-            when(mIdentityManager.getPrimaryAccountInfo(anyInt())).thenReturn(mCoreAccountInfo);
+            when(mIdentityManager.getPrimaryAccountInfo(anyInt()))
+                    .thenReturn(TestAccounts.ACCOUNT1);
 
             mAppData.showCount = INIT_SHOW_COUNT;
             mAppData.closeType = CloseType.UNKNOWN.getNumber();
diff --git a/chrome/browser/android/omnibox/autocomplete_controller_android.cc b/chrome/browser/android/omnibox/autocomplete_controller_android.cc
index 60b24b496..da5351d7 100644
--- a/chrome/browser/android/omnibox/autocomplete_controller_android.cc
+++ b/chrome/browser/android/omnibox/autocomplete_controller_android.cc
@@ -57,6 +57,7 @@
 #include "components/omnibox/browser/autocomplete_provider_client.h"
 #include "components/omnibox/browser/autocomplete_result.h"
 #include "components/omnibox/browser/history_fuzzy_provider.h"
+#include "components/omnibox/browser/lens_suggest_inputs_utils.h"
 #include "components/omnibox/browser/omnibox_event_global_tracker.h"
 #include "components/omnibox/browser/omnibox_field_trial.h"
 #include "components/omnibox/browser/omnibox_log.h"
@@ -181,8 +182,11 @@
   input_.set_allow_exact_keyword_match(allow_exact_keyword_match);
   input_.set_omit_asynchronous_matches(!want_asynchronous_matches);
   if (composebox_query_controller_bridge_) {
-    input_.set_lens_overlay_suggest_inputs(
-        composebox_query_controller_bridge_->GetLensOverlaySuggestInputs());
+    const auto& inputs =
+        composebox_query_controller_bridge_->GetLensOverlaySuggestInputs();
+    if (AreLensSuggestInputsReady(inputs)) {
+      input_.set_lens_overlay_suggest_inputs(inputs);
+    }
   }
   autocomplete_controller_->Start(input_);
 }
@@ -302,8 +306,11 @@
   input_.set_current_title(current_title);
   input_.set_focus_type(OFT::INTERACTION_FOCUS);
   if (composebox_query_controller_bridge_) {
-    input_.set_lens_overlay_suggest_inputs(
-        composebox_query_controller_bridge_->GetLensOverlaySuggestInputs());
+    const auto& inputs =
+        composebox_query_controller_bridge_->GetLensOverlaySuggestInputs();
+    if (AreLensSuggestInputsReady(inputs)) {
+      input_.set_lens_overlay_suggest_inputs(inputs);
+    }
   }
 
   autocomplete_controller_->Start(input_);
diff --git a/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc b/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
index 36f5000..9144ac2 100644
--- a/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
+++ b/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
@@ -434,8 +434,7 @@
   if (!is_platform_app) {
     CreateOpenNewSubmenu(
         extensions::GetLaunchType(extensions::ExtensionPrefs::Get(profile()),
-                                  extension) ==
-                extensions::LaunchType::LAUNCH_TYPE_WINDOW
+                                  extension) == extensions::LaunchType::kWindow
             ? IDS_APP_LIST_CONTEXT_MENU_NEW_WINDOW
             : IDS_APP_LIST_CONTEXT_MENU_NEW_TAB,
         menu_items);
diff --git a/chrome/browser/apps/platform_apps/extension_app_shim_manager_delegate_mac.cc b/chrome/browser/apps/platform_apps/extension_app_shim_manager_delegate_mac.cc
index 038e8e0..4feba11 100644
--- a/chrome/browser/apps/platform_apps/extension_app_shim_manager_delegate_mac.cc
+++ b/chrome/browser/apps/platform_apps/extension_app_shim_manager_delegate_mac.cc
@@ -139,7 +139,8 @@
     return false;
   if (extension->is_hosted_app() &&
       extensions::GetLaunchType(extensions::ExtensionPrefs::Get(profile),
-                                extension) == extensions::LAUNCH_TYPE_REGULAR) {
+                                extension) ==
+          extensions::LaunchType::kRegular) {
     return false;
   }
   // Note that this will return true for non-hosted apps (e.g, Chrome Remote
diff --git a/chrome/browser/ash/crostini/crostini_manager.cc b/chrome/browser/ash/crostini/crostini_manager.cc
index 40a8d860..e523ff17 100644
--- a/chrome/browser/ash/crostini/crostini_manager.cc
+++ b/chrome/browser/ash/crostini/crostini_manager.cc
@@ -1908,6 +1908,7 @@
   request.add_group_names("audio");
   request.add_group_names("cdrom");
   request.add_group_names("dialout");
+  request.add_group_names("disk");
   request.add_group_names("floppy");
   request.add_group_names("kvm");
   request.add_group_names("netdev");
diff --git a/chrome/browser/ash/logging/logging.cc b/chrome/browser/ash/logging/logging.cc
index 15adbd92..1a24a9b 100644
--- a/chrome/browser/ash/logging/logging.cc
+++ b/chrome/browser/ash/logging/logging.cc
@@ -12,6 +12,7 @@
 #include "base/files/scoped_file.h"
 #include "base/functional/bind.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/system/sys_info.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/browser/background/BUILD.gn b/chrome/browser/background/BUILD.gn
index fce7e2f..b385438 100644
--- a/chrome/browser/background/BUILD.gn
+++ b/chrome/browser/background/BUILD.gn
@@ -9,7 +9,6 @@
     sources = [
       "background_contents.h",
       "background_contents_service_observer.h",
-      "startup_launch_manager.h",
     ]
   }
 
@@ -35,10 +34,7 @@
 
 source_set("impl") {
   if (!is_android) {
-    sources = [
-      "background_contents.cc",
-      "startup_launch_manager.cc",
-    ]
+    sources = [ "background_contents.cc" ]
   }
 
   public_deps = [ "//chrome/browser:browser_public_dependencies" ]
@@ -73,10 +69,6 @@
   testonly = true
   sources = []
 
-  if (!is_android) {
-    sources += [ "startup_launch_manager_unittest.cc" ]
-  }
-
   if (enable_background_contents) {
     sources += [ "background_contents_service_unittest.cc" ]
   }
diff --git a/chrome/browser/background/extensions/BUILD.gn b/chrome/browser/background/extensions/BUILD.gn
index 2c82e98..59aaa36e 100644
--- a/chrome/browser/background/extensions/BUILD.gn
+++ b/chrome/browser/background/extensions/BUILD.gn
@@ -60,6 +60,7 @@
     "//chrome/browser/extensions",
     "//chrome/browser/lifetime:termination_notification",
     "//chrome/browser/profiles/keep_alive",
+    "//chrome/browser/startup",
     "//chrome/browser/status_icons",
     "//chrome/browser/ui",
     "//chrome/browser/ui/extensions",
@@ -98,6 +99,7 @@
     "//base",
     "//chrome/browser:browser_process",
     "//chrome/browser/background",
+    "//chrome/browser/startup",
     "//chrome/browser/status_icons",
     "//chrome/test:test_support",
     "//components/policy/core/common:test_support",
diff --git a/chrome/browser/background/extensions/background_mode_manager.cc b/chrome/browser/background/extensions/background_mode_manager.cc
index da0e3a8..0221c165 100644
--- a/chrome/browser/background/extensions/background_mode_manager.cc
+++ b/chrome/browser/background/extensions/background_mode_manager.cc
@@ -28,7 +28,6 @@
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/background/extensions/background_application_list_model.h"
 #include "chrome/browser/background/extensions/background_mode_optimizer.h"
-#include "chrome/browser/background/startup_launch_manager.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/glic/public/glic_enabling.h"
@@ -41,6 +40,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/startup/startup_launch_manager.h"
 #include "chrome/browser/status_icons/status_icon.h"
 #include "chrome/browser/status_icons/status_tray.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/background/extensions/background_mode_manager_unittest.cc b/chrome/browser/background/extensions/background_mode_manager_unittest.cc
index 5d338a6..943270a 100644
--- a/chrome/browser/background/extensions/background_mode_manager_unittest.cc
+++ b/chrome/browser/background/extensions/background_mode_manager_unittest.cc
@@ -18,13 +18,13 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_simple_task_runner.h"
 #include "build/build_config.h"
-#include "chrome/browser/background/startup_launch_manager.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/test_extension_system.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/browser/lifetime/browser_shutdown.h"
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
+#include "chrome/browser/startup/startup_launch_manager.h"
 #include "chrome/browser/status_icons/status_icon_menu_model.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/background/glic/BUILD.gn b/chrome/browser/background/glic/BUILD.gn
index 408473c1..176859e 100644
--- a/chrome/browser/background/glic/BUILD.gn
+++ b/chrome/browser/background/glic/BUILD.gn
@@ -41,6 +41,7 @@
     "//chrome/browser/glic/resources:browser_resources",
     "//chrome/browser/profiles:profile",
     "//chrome/browser/resources/glic:resources_grit",
+    "//chrome/browser/startup",
     "//chrome/browser/status_icons",
     "//chrome/browser/ui",
     "//chrome/browser/ui:browser_element_identifiers",
@@ -96,6 +97,7 @@
     "//chrome/browser/glic:impl",
     "//chrome/browser/glic/fre",
     "//chrome/browser/glic/test_support",
+    "//chrome/browser/startup",
     "//chrome/browser/status_icons",
     "//chrome/browser/ui/views/frame/",
     "//chrome/common:chrome_features",
diff --git a/chrome/browser/background/glic/glic_background_mode_manager.cc b/chrome/browser/background/glic/glic_background_mode_manager.cc
index 582c7da..8e1b6fa 100644
--- a/chrome/browser/background/glic/glic_background_mode_manager.cc
+++ b/chrome/browser/background/glic/glic_background_mode_manager.cc
@@ -12,7 +12,6 @@
 #include "chrome/browser/background/glic/glic_controller.h"
 #include "chrome/browser/background/glic/glic_launcher_configuration.h"
 #include "chrome/browser/background/glic/glic_status_icon.h"
-#include "chrome/browser/background/startup_launch_manager.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/glic/host/glic.mojom.h"
 #include "chrome/browser/glic/public/glic_enabling.h"
@@ -20,6 +19,7 @@
 #include "chrome/browser/global_features.h"
 #include "chrome/browser/profiles/nuke_profile_directory_utils.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/startup/startup_launch_manager.h"
 #include "components/keep_alive_registry/keep_alive_registry.h"
 #include "components/keep_alive_registry/keep_alive_types.h"
 #include "components/keep_alive_registry/scoped_keep_alive.h"
diff --git a/chrome/browser/background/glic/glic_background_mode_manager_interactive_uitest.cc b/chrome/browser/background/glic/glic_background_mode_manager_interactive_uitest.cc
index 2f61d85..a6b1c53 100644
--- a/chrome/browser/background/glic/glic_background_mode_manager_interactive_uitest.cc
+++ b/chrome/browser/background/glic/glic_background_mode_manager_interactive_uitest.cc
@@ -9,7 +9,6 @@
 #include "base/values.h"
 #include "chrome/browser/background/glic/glic_background_mode_manager.h"
 #include "chrome/browser/background/glic/glic_launcher_configuration.h"
-#include "chrome/browser/background/startup_launch_manager.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/glic/fre/glic_fre_controller.h"
 #include "chrome/browser/glic/glic_pref_names.h"
@@ -20,6 +19,7 @@
 #include "chrome/browser/global_features.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profile_test_util.h"
+#include "chrome/browser/startup/startup_launch_manager.h"
 #include "chrome/browser/status_icons/status_tray.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/bar/BookmarkBarSceneLayer.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/bar/BookmarkBarSceneLayer.java
index 0f002b4..cce6840 100644
--- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/bar/BookmarkBarSceneLayer.java
+++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/bar/BookmarkBarSceneLayer.java
@@ -105,7 +105,7 @@
 
     @Override
     public @Nullable SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) {
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager) {
         return this;
     }
 
diff --git a/chrome/browser/browser_keyevents_browsertest.cc b/chrome/browser/browser_keyevents_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/browser_keyevents_browsertest.cc
rename to chrome/browser/browser_keyevents_interactive_uitest.cc
diff --git a/chrome/browser/chrome_render_widget_host_browsertests.cc b/chrome/browser/chrome_render_widget_host_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/chrome_render_widget_host_browsertests.cc
rename to chrome/browser/chrome_render_widget_host_interactive_uitest.cc
diff --git a/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.cc b/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.cc
index fa26e38..1a5a3cc 100644
--- a/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.cc
+++ b/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.cc
@@ -3,11 +3,10 @@
 // found in the LICENSE file.
 #include "chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.h"
 
-#include "base/notreached.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/omnibox/omnibox_controller.h"
+#include "chrome/browser/ui/webui/searchbox/composebox_handler.h"
 #include "chrome/browser/ui/webui/searchbox/searchbox_omnibox_client.h"
-#include "ui/base/window_open_disposition_utils.h"
 
 namespace {
 
@@ -46,96 +45,14 @@
     mojo::PendingRemote<composebox::mojom::Page> pending_page,
     mojo::PendingReceiver<searchbox::mojom::PageHandler>
         pending_searchbox_handler)
-    : SearchboxHandler(
+    : ComposeboxHandler(
+          std::move(pending_handler),
+          std::move(pending_page),
           std::move(pending_searchbox_handler),
           profile,
           web_contents,
           std::make_unique<OmniboxController>(
               std::make_unique<ContextualTasksOmniboxClient>(profile,
-                                                             web_contents))),
-      page_{std::move(pending_page)},
-      handler_(this, std::move(pending_handler)) {
-  autocomplete_controller_observation_.Observe(autocomplete_controller());
-}
+                                                             web_contents))) {}
 
 ContextualTasksComposeboxHandler::~ContextualTasksComposeboxHandler() = default;
-
-void ContextualTasksComposeboxHandler::NotifySessionStarted() {
-  // noop.
-}
-
-void ContextualTasksComposeboxHandler::NotifySessionAbandoned() {
-  // noop.
-}
-
-void ContextualTasksComposeboxHandler::SubmitQuery(
-    const std::string& query_text,
-    uint8_t mouse_button,
-    bool alt_key,
-    bool ctrl_key,
-    bool meta_key,
-    bool shift_key) {}
-
-void ContextualTasksComposeboxHandler::AddFileContext(
-    searchbox::mojom::SelectedFileInfoPtr file_info,
-    mojo_base::BigBuffer file_bytes,
-    AddFileContextCallback callback) {
-  // noop.
-}
-
-void ContextualTasksComposeboxHandler::AddTabContext(int32_t tab_id,
-                                                     bool delay_upload,
-                                                     AddTabContextCallback) {
-  // noop.
-}
-
-void ContextualTasksComposeboxHandler::DeleteContext(
-    const base::UnguessableToken& file_token) {
-  // noop.
-}
-
-void ContextualTasksComposeboxHandler::ClearFiles() {
-  // noop.
-}
-
-void ContextualTasksComposeboxHandler::DeleteAutocompleteMatch(
-    uint8_t line,
-    const GURL& url) {
-  // noop.
-}
-
-void ContextualTasksComposeboxHandler::ExecuteAction(
-    uint8_t line,
-    uint8_t action_index,
-    const GURL& url,
-    base::TimeTicks match_selection_timestamp,
-    uint8_t mouse_button,
-    bool alt_key,
-    bool ctrl_key,
-    bool meta_key,
-    bool shift_key) {
-  // noop.
-}
-
-void ContextualTasksComposeboxHandler::OnThumbnailRemoved() {
-  // noop.
-}
-
-void ContextualTasksComposeboxHandler::FocusChanged(bool focused) {
-  // noop.
-}
-
-void ContextualTasksComposeboxHandler::SetDeepSearchMode(bool enabled) {
-  // Ignore, intentionally unimplemented for Lens. Deep search not implemented
-  // in Lens.
-}
-
-void ContextualTasksComposeboxHandler::SetCreateImageMode(bool enabled,
-                                                          bool image_present) {
-  // Ignore, intentionally unimplemented for Lens. Create image not implemented
-  // in Lens.
-}
-
-void ContextualTasksComposeboxHandler::HandleLensButtonClick() {
-  // noop
-}
diff --git a/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.h b/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.h
index b0459b59..a650ee73 100644
--- a/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.h
+++ b/chrome/browser/contextual_tasks/contextual_tasks_composebox_handler.h
@@ -4,23 +4,20 @@
 #ifndef CHROME_BROWSER_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_COMPOSEBOX_HANDLER_H_
 #define CHROME_BROWSER_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_COMPOSEBOX_HANDLER_H_
 
-#include <string>
-
-#include "base/memory/raw_ptr.h"
-#include "base/unguessable_token.h"
-#include "chrome/browser/ui/webui/searchbox/searchbox_handler.h"
+#include "chrome/browser/ui/webui/searchbox/composebox_handler.h"
 #include "components/omnibox/browser/searchbox.mojom.h"
 #include "content/public/browser/web_contents.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "ui/webui/resources/cr_components/composebox/composebox.mojom.h"
-#include "url/gurl.h"
 
 class Profile;
 
-class ContextualTasksComposeboxHandler : public composebox::mojom::PageHandler,
-                                         public SearchboxHandler {
+// ComposeboxHandler for the Contextual Tasks UI.
+// TODO (crbug.com/458102018): Add separate implementation for SubmitQuery()
+// that issues postmessages to the embedded webpage.
+class ContextualTasksComposeboxHandler : public ComposeboxHandler {
  public:
   ContextualTasksComposeboxHandler(
       Profile* profile,
@@ -30,48 +27,6 @@
       mojo::PendingReceiver<searchbox::mojom::PageHandler>
           pending_searchbox_handler);
   ~ContextualTasksComposeboxHandler() override;
-
-  // composebox::mojom::PageHandler:
-  void NotifySessionStarted() override;
-  void NotifySessionAbandoned() override;
-  void SubmitQuery(const std::string& query_text,
-                   uint8_t mouse_button,
-                   bool alt_key,
-                   bool ctrl_key,
-                   bool meta_key,
-                   bool shift_key) override;
-  void AddFileContext(searchbox::mojom::SelectedFileInfoPtr file_info,
-                      mojo_base::BigBuffer file_bytes,
-                      AddFileContextCallback callback) override;
-  void AddTabContext(int32_t tab_id,
-                     bool delay_upload,
-                     AddTabContextCallback) override;
-  void DeleteContext(const base::UnguessableToken& file_token) override;
-  void ClearFiles() override;
-
-  // searchbox::mojom::PageHandler:
-  void DeleteAutocompleteMatch(uint8_t line, const GURL& url) override;
-  void ExecuteAction(uint8_t line,
-                     uint8_t action_index,
-                     const GURL& url,
-                     base::TimeTicks match_selection_timestamp,
-                     uint8_t mouse_button,
-                     bool alt_key,
-                     bool ctrl_key,
-                     bool meta_key,
-                     bool shift_key) override;
-  void OnThumbnailRemoved() override;
-
-  void FocusChanged(bool focused) override;
-  void SetDeepSearchMode(bool enabled) override;
-  void SetCreateImageMode(bool enabled, bool image_present) override;
-  void HandleLensButtonClick() override;
-
- private:
-  // These are located at the end of the list of member variables to ensure the
-  // WebUI page is disconnected before other members are destroyed.
-  mojo::Remote<composebox::mojom::Page> page_;
-  mojo::Receiver<composebox::mojom::PageHandler> handler_;
 };
 
 #endif  // CHROME_BROWSER_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_COMPOSEBOX_HANDLER_H_
diff --git a/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc b/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc
index 1570600..d07051f9 100644
--- a/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc
+++ b/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_entry.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_entry_scope.h"
+#include "chrome/browser/ui/views/side_panel/side_panel_enums.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_registry.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_web_ui_view.h"
 #include "chrome/browser/ui/webui/webui_embedding_context.h"
@@ -337,8 +338,9 @@
 void ContextualTasksSidePanelCoordinator::Hide() {
   auto* side_panel_ui = static_cast<SidePanelCoordinator*>(
       browser_window_->GetFeatures().side_panel_ui());
-  side_panel_ui->Close(/*suppress_animations=*/true,
-                       SidePanelEntry::PanelType::kToolbar);
+  side_panel_ui->Close(SidePanelEntry::PanelType::kToolbar,
+                       SidePanelEntryHideReason::kSidePanelClosed,
+                       /*suppress_animations=*/true);
 }
 
 void ContextualTasksSidePanelCoordinator::Unhide() {
diff --git a/chrome/browser/controlled_frame/controlled_frame_interactive_browsertest.cc b/chrome/browser/controlled_frame/controlled_frame_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/controlled_frame/controlled_frame_interactive_browsertest.cc
rename to chrome/browser/controlled_frame/controlled_frame_interactive_uitest.cc
diff --git a/chrome/browser/default_browser/BUILD.gn b/chrome/browser/default_browser/BUILD.gn
index 87369fc9..235fb84 100644
--- a/chrome/browser/default_browser/BUILD.gn
+++ b/chrome/browser/default_browser/BUILD.gn
@@ -2,11 +2,14 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-assert(!is_android, "Default browser framework is only for desktop platforms")
-assert(!is_chromeos, "Default browser framework doesn't exist on chromeos")
+assert(!is_android && !is_chromeos,
+       "Default browser is for desktop platforms only except ChromeOS.")
 
 source_set("default_browser") {
-  friend = [ ":unit_tests" ]
+  friend = [
+    ":unit_tests",
+    ":browser_tests",
+  ]
 
   public = [
     "default_browser_controller.h",
@@ -18,6 +21,8 @@
     "default_browser_controller.cc",
     "default_browser_features.cc",
     "default_browser_manager.cc",
+    "default_browser_monitor.cc",
+    "default_browser_monitor.h",
     "default_browser_setter.h",
     "setters/shell_integration_default_browser_setter.cc",
     "setters/shell_integration_default_browser_setter.h",
@@ -26,6 +31,14 @@
   public_deps = [ "//base" ]
 
   deps = [ "//chrome/browser:shell_integration" ]
+
+  if (is_win) {
+    sources += [ "default_browser_monitor_win.cc" ]
+
+    deps += [ "//chrome/browser/win:registry_watcher" ]
+  } else {
+    sources += [ "default_browser_monitor_stub.cc" ]
+  }
 }
 
 source_set("unit_tests") {
@@ -45,3 +58,21 @@
     "//content/test:test_support",
   ]
 }
+
+source_set("browser_tests") {
+  testonly = true
+
+  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
+
+  sources = [ "default_browser_manager_browsertest.cc" ]
+
+  deps = [
+    ":default_browser",
+    "//base/test:test_support",
+    "//chrome/browser:browser_process",
+    "//chrome/browser:global_features",
+    "//chrome/test:test_support_ui",
+    "//content/test:test_support",
+    "//ui/base",
+  ]
+}
diff --git a/chrome/browser/default_browser/default_browser_manager.cc b/chrome/browser/default_browser/default_browser_manager.cc
index 31e0901..8770ee2 100644
--- a/chrome/browser/default_browser/default_browser_manager.cc
+++ b/chrome/browser/default_browser/default_browser_manager.cc
@@ -4,12 +4,20 @@
 
 #include "chrome/browser/default_browser/default_browser_manager.h"
 
+#include <utility>
+
+#include "base/functional/callback.h"
 #include "base/memory/scoped_refptr.h"
+#include "chrome/browser/default_browser/default_browser_monitor.h"
 #include "chrome/browser/default_browser/setters/shell_integration_default_browser_setter.h"
 #include "chrome/browser/shell_integration.h"
 
 namespace default_browser {
 
+DefaultBrowserManager::DefaultBrowserManager() = default;
+
+DefaultBrowserManager::~DefaultBrowserManager() = default;
+
 // Static
 void DefaultBrowserManager::GetDefaultBrowserState(
     DefaultBrowserCheckCompletionCallback callback) {
@@ -25,4 +33,15 @@
       std::make_unique<ShellIntegrationDefaultBrowserSetter>(), entrypoint);
 }
 
+base::CallbackListSubscription
+DefaultBrowserManager::RegisterDefaultBrowserChanged(
+    base::RepeatingClosure callback) {
+  if (!monitor_) {
+    monitor_ = std::make_unique<DefaultBrowserMonitor>();
+    monitor_->StartMonitor();
+  }
+
+  return monitor_->RegisterDefaultBrowserChanged(std::move(callback));
+}
+
 }  // namespace default_browser
diff --git a/chrome/browser/default_browser/default_browser_manager.h b/chrome/browser/default_browser/default_browser_manager.h
index 7009c23..a280cb25 100644
--- a/chrome/browser/default_browser/default_browser_manager.h
+++ b/chrome/browser/default_browser/default_browser_manager.h
@@ -7,11 +7,14 @@
 
 #include <memory>
 
+#include "base/callback_list.h"
 #include "base/functional/callback_forward.h"
 #include "chrome/browser/default_browser/default_browser_controller.h"
 
 namespace default_browser {
 
+class DefaultBrowserMonitor;
+
 using DefaultBrowserCheckCompletionCallback =
     base::OnceCallback<void(DefaultBrowserState)>;
 
@@ -21,8 +24,8 @@
 // default-browser utilities.
 class DefaultBrowserManager {
  public:
-  DefaultBrowserManager() = default;
-  ~DefaultBrowserManager() = default;
+  DefaultBrowserManager();
+  ~DefaultBrowserManager();
 
   DefaultBrowserManager(const DefaultBrowserManager&) = delete;
   DefaultBrowserManager& operator=(const DefaultBrowserManager&) = delete;
@@ -35,6 +38,21 @@
   // Utility method to check the current default browser state asynchronously.
   static void GetDefaultBrowserState(
       DefaultBrowserCheckCompletionCallback callback);
+
+  // Registers a callback that will be invoked on the manager thread whenever
+  // the system's default browser for HTTP/HTTPS protocols changes. The returned
+  // subscription object MUST be kept in scope for as long as the caller wishes
+  // to receive notifications. Destroying the subscription object will
+  // unregister the callback.
+  //
+  // For now, only Windows platform will notify when a change occur.
+  base::CallbackListSubscription RegisterDefaultBrowserChanged(
+      base::RepeatingClosure callback);
+
+ private:
+  // The platform default browser change monitor that handles the low-level
+  // logic for detecting when the system's default browser has changed.
+  std::unique_ptr<DefaultBrowserMonitor> monitor_;
 };
 
 }  // namespace default_browser
diff --git a/chrome/browser/default_browser/default_browser_manager_browsertest.cc b/chrome/browser/default_browser/default_browser_manager_browsertest.cc
new file mode 100644
index 0000000..3314ff2
--- /dev/null
+++ b/chrome/browser/default_browser/default_browser_manager_browsertest.cc
@@ -0,0 +1,187 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/default_browser/default_browser_manager.h"
+
+#include <string>
+
+#include "base/test/test_future.h"
+#include "build/build_config.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/global_features.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/test/browser_test.h"
+#include "content/public/test/browser_test_utils.h"
+
+#if BUILDFLAG(IS_WIN)
+#include "base/test/test_reg_util_win.h"
+#include "base/win/registry.h"
+#endif  // BUILDFLAG(IS_WIN)
+
+namespace default_browser {
+
+namespace {
+
+#if BUILDFLAG(IS_WIN)
+constexpr wchar_t kProgIdValue[] = L"ProgId";
+
+constexpr wchar_t kRegistryPath[] =
+    L"Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\h"
+    L"ttp\\UserChoice";
+
+void CreateDefaultBrowserKey(const std::wstring& prog_id) {
+  base::win::RegKey key(HKEY_CURRENT_USER, kRegistryPath,
+                        KEY_WRITE | KEY_CREATE_SUB_KEY);
+  ASSERT_TRUE(key.Valid());
+  ASSERT_EQ(key.WriteValue(kProgIdValue, prog_id.c_str()), ERROR_SUCCESS);
+}
+
+void ChangeDefaultBrowserProgId(const std::wstring& new_prog_id) {
+  base::win::RegKey key(HKEY_CURRENT_USER, kRegistryPath, KEY_WRITE);
+  ASSERT_TRUE(key.Valid());
+  ASSERT_EQ(key.WriteValue(kProgIdValue, new_prog_id.c_str()), ERROR_SUCCESS);
+}
+#endif  // BUILDFLAG(IS_WIN)
+
+}  // namespace
+
+#if BUILDFLAG(IS_WIN)
+class DefaultBrowserManagerWinBrowserTest : public InProcessBrowserTest {
+ public:
+  DefaultBrowserManagerWinBrowserTest() = default;
+  ~DefaultBrowserManagerWinBrowserTest() override = default;
+
+  void SetUp() override {
+    ASSERT_NO_FATAL_FAILURE(
+        registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER));
+    base::win::RegKey key;
+    ASSERT_EQ(ERROR_SUCCESS,
+              key.Create(HKEY_CURRENT_USER, kRegistryPath, KEY_WRITE));
+    InProcessBrowserTest::SetUp();
+  }
+
+ protected:
+  registry_util::RegistryOverrideManager registry_override_manager_;
+};
+
+IN_PROC_BROWSER_TEST_F(DefaultBrowserManagerWinBrowserTest,
+                       ChangeIsDetectedAndObserverIsNotified) {
+  CreateDefaultBrowserKey(L"ChromeHTML");
+  DefaultBrowserManager* manager =
+      g_browser_process->GetFeatures()->default_browser_manager();
+  ASSERT_TRUE(manager);
+
+  base::test::TestFuture<void> future;
+  base::CallbackListSubscription subscription =
+      manager->RegisterDefaultBrowserChanged(future.GetRepeatingCallback());
+  ChangeDefaultBrowserProgId(L"VanadiumHTML");
+  EXPECT_TRUE(future.Wait());
+}
+
+IN_PROC_BROWSER_TEST_F(DefaultBrowserManagerWinBrowserTest,
+                       SubscriptionDestroyedPreventsCallback) {
+  CreateDefaultBrowserKey(L"ChromeHTML");
+  DefaultBrowserManager* manager =
+      g_browser_process->GetFeatures()->default_browser_manager();
+  ASSERT_TRUE(manager);
+
+  base::test::TestFuture<void> future;
+  {
+    base::CallbackListSubscription subscription =
+        manager->RegisterDefaultBrowserChanged(future.GetRepeatingCallback());
+  }
+
+  ChangeDefaultBrowserProgId(L"VanadiumHTML");
+  content::RunAllTasksUntilIdle();
+  EXPECT_FALSE(future.IsReady());
+}
+
+IN_PROC_BROWSER_TEST_F(DefaultBrowserManagerWinBrowserTest,
+                       AllRegisteredObserversAreNotified) {
+  CreateDefaultBrowserKey(L"ChromeHTML");
+  DefaultBrowserManager* manager =
+      g_browser_process->GetFeatures()->default_browser_manager();
+  ASSERT_TRUE(manager);
+
+  base::test::TestFuture<void> future1;
+  base::test::TestFuture<void> future2;
+  base::CallbackListSubscription subscription1 =
+      manager->RegisterDefaultBrowserChanged(future1.GetRepeatingCallback());
+  base::CallbackListSubscription subscription2 =
+      manager->RegisterDefaultBrowserChanged(future2.GetRepeatingCallback());
+
+  ChangeDefaultBrowserProgId(L"VanadiumHTML");
+  EXPECT_TRUE(future1.Wait());
+  EXPECT_TRUE(future2.Wait());
+}
+
+IN_PROC_BROWSER_TEST_F(DefaultBrowserManagerWinBrowserTest,
+                       SubsequentChangesAreAlsoDetected) {
+  CreateDefaultBrowserKey(L"ChromeHTML");
+  DefaultBrowserManager* manager =
+      g_browser_process->GetFeatures()->default_browser_manager();
+  ASSERT_TRUE(manager);
+
+  {
+    base::test::TestFuture<void> future_change1;
+    base::CallbackListSubscription subscription =
+        manager->RegisterDefaultBrowserChanged(
+            future_change1.GetRepeatingCallback());
+    ChangeDefaultBrowserProgId(L"VanadiumHTML");
+    ASSERT_TRUE(future_change1.Wait()) << "First change was not detected.";
+  }
+
+  {
+    base::test::TestFuture<void> future_change2;
+    base::CallbackListSubscription subscription =
+        manager->RegisterDefaultBrowserChanged(
+            future_change2.GetRepeatingCallback());
+    ChangeDefaultBrowserProgId(L"ManganeseHTML");
+    EXPECT_TRUE(future_change2.Wait()) << "Second change was not detected.";
+  }
+}
+
+IN_PROC_BROWSER_TEST_F(
+    DefaultBrowserManagerWinBrowserTest,
+    SubsequentChangesAreAlsoDetectedWithTheSameSubscription) {
+  CreateDefaultBrowserKey(L"ChromeHTML");
+  DefaultBrowserManager* manager =
+      g_browser_process->GetFeatures()->default_browser_manager();
+  ASSERT_TRUE(manager);
+
+  int call_count = 0;
+  base::RunLoop run_loop1;
+  base::RunLoop run_loop2;
+
+  // This callback will be invoked for each default browser change.
+  // On the first invocation, it will quit the first `run_loop`.
+  // On the second, it will quit the second `run_loop`.
+  auto subscription_callback = base::BindRepeating(
+      [](int* count, base::RunLoop* loop1, base::RunLoop* loop2) {
+        (*count)++;
+        if (*count == 1) {
+          loop1->Quit();
+        } else if (*count == 2) {
+          loop2->Quit();
+        }
+      },
+      &call_count, &run_loop1, &run_loop2);
+
+  // Register the single subscription that will be used for the entire test.
+  base::CallbackListSubscription subscription =
+      manager->RegisterDefaultBrowserChanged(subscription_callback);
+
+  // Trigger the first change.
+  ChangeDefaultBrowserProgId(L"VanadiumHTML");
+  run_loop1.Run();
+  EXPECT_EQ(call_count, 1) << "First change was not detected.";
+
+  // Trigger the second change. The same subscription should be notified again.
+  ChangeDefaultBrowserProgId(L"ManganeseHTML");
+  run_loop2.Run();
+  EXPECT_EQ(call_count, 2) << "Second change was not detected.";
+}
+#endif  // BUILDFLAG(IS_WIN)
+
+}  // namespace default_browser
diff --git a/chrome/browser/default_browser/default_browser_monitor.cc b/chrome/browser/default_browser/default_browser_monitor.cc
new file mode 100644
index 0000000..27748ee
--- /dev/null
+++ b/chrome/browser/default_browser/default_browser_monitor.cc
@@ -0,0 +1,28 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/default_browser/default_browser_monitor.h"
+
+#include <utility>
+
+#include "base/functional/callback.h"
+#include "chrome/browser/win/registry_watcher.h"
+
+namespace default_browser {
+
+DefaultBrowserMonitor::DefaultBrowserMonitor() = default;
+
+DefaultBrowserMonitor::~DefaultBrowserMonitor() = default;
+
+base::CallbackListSubscription
+DefaultBrowserMonitor::RegisterDefaultBrowserChanged(
+    base::RepeatingClosure callback) {
+  return callback_list_.Add(std::move(callback));
+}
+
+void DefaultBrowserMonitor::NotifyObservers() {
+  callback_list_.Notify();
+}
+
+}  // namespace default_browser
diff --git a/chrome/browser/default_browser/default_browser_monitor.h b/chrome/browser/default_browser/default_browser_monitor.h
new file mode 100644
index 0000000..c93829d
--- /dev/null
+++ b/chrome/browser/default_browser/default_browser_monitor.h
@@ -0,0 +1,62 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_MONITOR_H_
+#define CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_MONITOR_H_
+
+#include <memory>
+
+#include "base/callback_list.h"
+#include "base/functional/callback_forward.h"
+#include "base/memory/scoped_refptr.h"
+#include "build/build_config.h"
+
+class RegistryWatcher;
+
+namespace default_browser {
+
+// Provides a platform-agnostic object for observing changes to the system's
+// default browser setting. Observers are notified on the DefaultBrowserManager
+// thread.
+class DefaultBrowserMonitor {
+ public:
+  DefaultBrowserMonitor();
+  ~DefaultBrowserMonitor();
+
+  DefaultBrowserMonitor(const DefaultBrowserMonitor&) = delete;
+  const DefaultBrowserMonitor& operator=(const DefaultBrowserMonitor&) = delete;
+
+  // Starts the monitoring process. The implementation will be platform
+  // specific.
+  void StartMonitor();
+
+  // Registers a callback to be run on the DefaultBrowserManager thread when a
+  // change is detected.
+  base::CallbackListSubscription RegisterDefaultBrowserChanged(
+      base::RepeatingClosure callback);
+
+ protected:
+  void NotifyObservers();
+
+ private:
+#if BUILDFLAG(IS_WIN)
+  // The callback executed on the DefaultBrowserManager thread when the Worker
+  // detects a change.
+  void OnDefaultBrowserChangedWin();
+
+  // The monitor owns the watcher.
+  std::unique_ptr<RegistryWatcher> registry_watcher_;
+#endif  //  BUILDFLAG(IS_WIN)
+
+  base::RepeatingClosureList callback_list_;
+
+  // Enforces that this class is used on same sequence.
+  SEQUENCE_CHECKER(sequence_checker_);
+
+  base::WeakPtrFactory<DefaultBrowserMonitor> weak_ptr_factory_{this};
+};
+
+}  // namespace default_browser
+
+#endif  // CHROME_BROWSER_DEFAULT_BROWSER_DEFAULT_BROWSER_MONITOR_H_
diff --git a/chrome/browser/default_browser/default_browser_monitor_stub.cc b/chrome/browser/default_browser/default_browser_monitor_stub.cc
new file mode 100644
index 0000000..fa18245
--- /dev/null
+++ b/chrome/browser/default_browser/default_browser_monitor_stub.cc
@@ -0,0 +1,13 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/default_browser/default_browser_monitor.h"
+
+namespace default_browser {
+
+void DefaultBrowserMonitor::StartMonitor() {
+  // Do nothing.
+}
+
+}  // namespace default_browser
diff --git a/chrome/browser/default_browser/default_browser_monitor_win.cc b/chrome/browser/default_browser/default_browser_monitor_win.cc
new file mode 100644
index 0000000..71c4a0b
--- /dev/null
+++ b/chrome/browser/default_browser/default_browser_monitor_win.cc
@@ -0,0 +1,60 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/default_browser/default_browser_monitor.h"
+
+#include <windows.h>
+
+#include <array>
+#include <memory>
+#include <string>
+#include <string_view>
+#include <vector>
+
+#include "base/functional/bind.h"
+#include "chrome/browser/win/registry_watcher.h"
+
+namespace default_browser {
+
+namespace {
+
+// The registry paths for the default browser choice for http and https.
+constexpr std::array<std::wstring_view, 2> kDefaultBrowserSchemes = {
+    L"Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http"
+    L"\\UserChoice",
+    L"Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\https"
+    L"\\UserChoice"};
+
+}  // namespace
+
+void DefaultBrowserMonitor::StartMonitor() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  // Create a new watcher, transferring ownership to the unique_ptr.
+  // The watcher will call OnDefaultBrowserChanged when a change is detected.
+  registry_watcher_ = std::make_unique<RegistryWatcher>(
+      std::vector<std::wstring>(kDefaultBrowserSchemes.begin(),
+                                kDefaultBrowserSchemes.end()),
+      base::BindOnce(&DefaultBrowserMonitor::OnDefaultBrowserChangedWin,
+                     // base::Unretained is safe because `this` monitor owns
+                     // the `registry_watcher_`. The watcher will be destroyed
+                     // before the monitor is, so the callback can't be called
+                     // on a dangling pointer.
+                     base::Unretained(this)));
+}
+
+void DefaultBrowserMonitor::OnDefaultBrowserChangedWin() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  // The old watcher has fired and done its job.
+  registry_watcher_.reset();
+
+  // Notify observers that a change occurred.
+  NotifyObservers();
+
+  // Start a new watch to be notified of the *next* change.
+  StartMonitor();
+}
+
+}  // namespace default_browser
diff --git a/chrome/browser/devtools/devtools_interactive_browsertest.cc b/chrome/browser/devtools/devtools_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/devtools/devtools_interactive_browsertest.cc
rename to chrome/browser/devtools/devtools_interactive_uitest.cc
diff --git a/chrome/browser/download/download_open_dialog.h b/chrome/browser/download/download_open_dialog.h
deleted file mode 100644
index 511df64..0000000
--- a/chrome/browser/download/download_open_dialog.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2025 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_OPEN_DIALOG_H_
-#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_OPEN_DIALOG_H_
-
-#include <string>
-
-#include "base/files/file_path.h"
-#include "base/functional/callback_forward.h"
-
-namespace content {
-class WebContents;
-}  // namespace content
-
-// Creates and shows the open confirmation dialog.
-void ShowDownloadOpenConfirmationDialog(
-    content::WebContents* web_contents,
-    const std::string& extension_name,
-    const base::FilePath& file_path,
-    base::OnceCallback<void(bool)> open_callback);
-
-#endif  // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_OPEN_DIALOG_H_
diff --git a/chrome/browser/enterprise/connectors/connectors_manager.cc b/chrome/browser/enterprise/connectors/connectors_manager.cc
index 90aece6..fdd9492 100644
--- a/chrome/browser/enterprise/connectors/connectors_manager.cc
+++ b/chrome/browser/enterprise/connectors/connectors_manager.cc
@@ -174,11 +174,6 @@
 }
 #endif  // BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
 
-void ConnectorsManager::SetTelemetryObserverCallback(
-    base::RepeatingCallback<void()> callback) {
-  telemetry_observer_callback_ = callback;
-}
-
 void ConnectorsManager::OnPrefChanged(AnalysisConnector connector) {
   CacheAnalysisConnectorPolicy(connector);
 #if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
@@ -233,9 +228,4 @@
   }
 }
 
-const base::RepeatingCallback<void()>
-ConnectorsManager::GetTelemetryObserverCallbackForTesting() const {
-  return telemetry_observer_callback_;
-}
-
 }  // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/connectors_manager.h b/chrome/browser/enterprise/connectors/connectors_manager.h
index c2be374..28d183f 100644
--- a/chrome/browser/enterprise/connectors/connectors_manager.h
+++ b/chrome/browser/enterprise/connectors/connectors_manager.h
@@ -67,12 +67,6 @@
   bool IsConnectorEnabledForLocalAgent(AnalysisConnector connector) const;
 #endif
 
-  void SetTelemetryObserverCallback(base::RepeatingCallback<void()> callback);
-
-  // Public testing functions.
-  const base::RepeatingCallback<void()> GetTelemetryObserverCallbackForTesting()
-      const;
-
  private:
 #if BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
   // BrowserListObserver overrides:
diff --git a/chrome/browser/enterprise/connectors/connectors_service.cc b/chrome/browser/enterprise/connectors/connectors_service.cc
index ff59007..821db5f0 100644
--- a/chrome/browser/enterprise/connectors/connectors_service.cc
+++ b/chrome/browser/enterprise/connectors/connectors_service.cc
@@ -10,23 +10,17 @@
 #include "base/check_op.h"
 #include "base/memory/singleton.h"
 #include "base/no_destructor.h"
-#include "base/path_service.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/enterprise/connectors/connectors_manager.h"
-#include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h"
-#include "chrome/browser/enterprise/util/affiliation.h"
 #include "chrome/browser/policy/chrome_browser_policy_connector.h"
 #include "chrome/browser/policy/dm_token_utils.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/profiles/profile_attributes_entry.h"
-#include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/reporting_util.h"
 #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/ui/managed_ui.h"
-#include "components/embedder_support/user_agent_utils.h"
 #include "components/enterprise/browser/controller/browser_dm_token_storage.h"
 #include "components/enterprise/buildflags/buildflags.h"
 #include "components/enterprise/common/proto/connectors.pb.h"
@@ -35,14 +29,11 @@
 #include "components/enterprise/connectors/core/service_provider_config.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/policy/core/common/cloud/cloud_policy_store.h"
-#include "components/policy/core/common/cloud/cloud_policy_util.h"
 #include "components/policy/core/common/cloud/dm_token.h"
 #include "components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h"
 #include "components/policy/core/common/cloud/machine_level_user_cloud_policy_store.h"
 #include "components/policy/core/common/policy_types.h"
 #include "components/safe_browsing/buildflags.h"
-#include "components/safe_browsing/core/common/features.h"
-#include "components/signin/public/base/consent_level.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
 #include "components/user_prefs/user_prefs.h"
 #include "components/version_info/version_info.h"
@@ -80,8 +71,9 @@
   std::string client_id;
 #if BUILDFLAG(IS_CHROMEOS)
   auto* manager = profile->GetUserCloudPolicyManagerAsh();
-  if (manager && manager->core() && manager->core()->client())
+  if (manager && manager->core() && manager->core()->client()) {
     client_id = manager->core()->client()->client_id();
+  }
 #else
   client_id = policy::BrowserDMTokenStorage::Get()->RetrieveClientId();
 #endif
@@ -115,8 +107,9 @@
 std::optional<std::string> GetDeviceDMToken() {
   const enterprise_management::PolicyData* policy_data =
       ash::DeviceSettingsService::Get()->policy_data();
-  if (policy_data && policy_data->has_request_token())
+  if (policy_data && policy_data->has_request_token()) {
     return policy_data->request_token();
+  }
   return std::nullopt;
 }
 #endif
@@ -134,11 +127,11 @@
 // ConnectorsService implementation
 // --------------------------------
 
-ConnectorsService::ConnectorsService(content::BrowserContext* context,
-                                     std::unique_ptr<ConnectorsManager> manager)
-    : context_(context), connectors_manager_(std::move(manager)) {
+ConnectorsService::ConnectorsService(
+    content::BrowserContext* context,
+    std::unique_ptr<ConnectorsManagerBase> manager)
+    : ConnectorsServiceBase(std::move(manager)), context_(context) {
   DCHECK(context_);
-  DCHECK(connectors_manager_);
 }
 
 ConnectorsService::~ConnectorsService() = default;
@@ -173,9 +166,10 @@
   }
 
   std::optional<ReportingSettings> settings =
-      connectors_manager_->GetReportingSettings();
-  if (!settings.has_value())
+      connectors_manager_base_->GetReportingSettings();
+  if (!settings.has_value()) {
     return std::nullopt;
+  }
 
 #if BUILDFLAG(SAFE_BROWSING_AVAILABLE)
   Profile* profile = Profile::FromBrowserContext(context_);
@@ -207,11 +201,12 @@
   if (url.SchemeIsBlob() || url.SchemeIsFileSystem()) {
     GURL inner = url.inner_url() ? *url.inner_url() : GURL(url.GetPath());
     return GetCommonAnalysisSettings(
-        connectors_manager_->GetAnalysisSettings(inner, connector), connector);
+        connectors_manager_base_->GetAnalysisSettings(inner, connector),
+        connector);
   }
 
   return GetCommonAnalysisSettings(
-      connectors_manager_->GetAnalysisSettings(url, connector), connector);
+      connectors_manager_base_->GetAnalysisSettings(url, connector), connector);
 }
 
 #if BUILDFLAG(IS_CHROMEOS)
@@ -220,12 +215,16 @@
     const storage::FileSystemURL& destination_url,
     AnalysisConnector connector) {
   DCHECK_EQ(connector, AnalysisConnector::FILE_TRANSFER);
-  if (!ConnectorsEnabled())
+  if (!ConnectorsEnabled()) {
     return std::nullopt;
+  }
+
+  auto* connectors_manager =
+      static_cast<ConnectorsManager*>(connectors_manager_base_.get());
 
   return GetCommonAnalysisSettings(
-      connectors_manager_->GetAnalysisSettings(context_, source_url,
-                                               destination_url, connector),
+      connectors_manager->GetAnalysisSettings(context_, source_url,
+                                              destination_url, connector),
       connector);
 }
 #endif  // BUILDFLAG(IS_CHROMEOS)
@@ -233,8 +232,9 @@
 std::optional<AnalysisSettings> ConnectorsService::GetCommonAnalysisSettings(
     std::optional<AnalysisSettings> settings,
     AnalysisConnector connector) {
-  if (!settings.has_value())
+  if (!settings.has_value()) {
     return std::nullopt;
+  }
 
 #if !BUILDFLAG(ENTERPRISE_LOCAL_CONTENT_ANALYSIS)
   if (settings->cloud_or_local_settings.is_local_analysis()) {
@@ -247,8 +247,9 @@
   bool is_cloud = settings.value().cloud_or_local_settings.is_cloud_analysis();
 
   if (is_cloud) {
-    if (!dm_token.has_value())
+    if (!dm_token.has_value()) {
       return std::nullopt;
+    }
 
     std::get<CloudAnalysisSettings>(settings.value().cloud_or_local_settings)
         .dm_token = dm_token.value().value;
@@ -264,76 +265,16 @@
   return settings;
 }
 
-bool ConnectorsService::IsConnectorEnabled(AnalysisConnector connector) const {
-  if (!ConnectorsEnabled())
-    return false;
-
-  return connectors_manager_->IsAnalysisConnectorEnabled(connector);
-}
-
-std::vector<const AnalysisConfig*> ConnectorsService::GetAnalysisServiceConfigs(
-    AnalysisConnector connector) {
-  if (!ConnectorsEnabled())
-    return {};
-
-  return connectors_manager_->GetAnalysisServiceConfigs(connector);
-}
-
-bool ConnectorsService::DelayUntilVerdict(AnalysisConnector connector) {
-  if (!ConnectorsEnabled())
-    return false;
-
-  return connectors_manager_->DelayUntilVerdict(connector);
-}
-
-std::optional<std::u16string> ConnectorsService::GetCustomMessage(
-    AnalysisConnector connector,
-    const std::string& tag) {
-  if (!ConnectorsEnabled())
-    return std::nullopt;
-
-  return connectors_manager_->GetCustomMessage(connector, tag);
-}
-
-std::optional<GURL> ConnectorsService::GetLearnMoreUrl(
-    AnalysisConnector connector,
-    const std::string& tag) {
-  if (!ConnectorsEnabled())
-    return std::nullopt;
-
-  return connectors_manager_->GetLearnMoreUrl(connector, tag);
-}
-
-bool ConnectorsService::GetBypassJustificationRequired(
-    AnalysisConnector connector,
-    const std::string& tag) {
-  if (!ConnectorsEnabled())
-    return false;
-
-  return connectors_manager_->GetBypassJustificationRequired(connector, tag);
-}
-
 bool ConnectorsService::HasExtraUiToDisplay(AnalysisConnector connector,
                                             const std::string& tag) {
   return GetCustomMessage(connector, tag) || GetLearnMoreUrl(connector, tag) ||
          GetBypassJustificationRequired(connector, tag);
 }
 
-std::vector<std::string> ConnectorsService::GetAnalysisServiceProviderNames(
-    AnalysisConnector connector) {
-  if (!ConnectorsEnabled())
-    return {};
-
-  if (!GetDmToken(AnalysisConnectorScopePref(connector)).has_value()) {
-    return {};
-  }
-
-  return connectors_manager_->GetAnalysisServiceProviderNames(connector);
-}
-
 std::string ConnectorsService::GetManagementDomain() {
-  if (!ConnectorsEnabled())
+  if (!ConnectorsEnabled()) {
     return std::string();
+  }
 
   std::optional<policy::PolicyScope> scope = std::nullopt;
   for (const char* scope_pref :
@@ -349,13 +290,15 @@
 
       // Having one CBCM Connector policy set implies that profile ones will be
       // ignored for another domain, so the loop can stop immediately.
-      if (scope == policy::PolicyScope::POLICY_SCOPE_MACHINE)
+      if (scope == policy::PolicyScope::POLICY_SCOPE_MACHINE) {
         break;
+      }
     }
   }
 
-  if (!scope.has_value())
+  if (!scope.has_value()) {
     return std::string();
+  }
 
 #if BUILDFLAG(IS_CHROMEOS)
   return GetAccountManagerIdentity(Profile::FromBrowserContext(context_))
@@ -369,8 +312,9 @@
   policy::MachineLevelUserCloudPolicyManager* manager =
       g_browser_process->browser_policy_connector()
           ->machine_level_user_cloud_policy_manager();
-  if (!manager)
+  if (!manager) {
     return std::string();
+  }
 
   policy::CloudPolicyStore* store = manager->store();
   return (store && store->has_policy())
@@ -402,15 +346,6 @@
 #endif
 }
 
-ConnectorsManager* ConnectorsService::ConnectorsManagerForTesting() {
-  return connectors_manager_.get();
-}
-
-void ConnectorsService::ObserveTelemetryReporting(
-    base::RepeatingCallback<void()> callback) {
-  connectors_manager_->SetTelemetryObserverCallback(callback);
-}
-
 std::optional<ConnectorsService::DmToken> ConnectorsService::GetDmToken(
     const char* scope_pref) const {
 #if BUILDFLAG(IS_CHROMEOS)
@@ -436,8 +371,9 @@
   policy::DMToken dm_token =
       policy::GetDMToken(Profile::FromBrowserContext(context_));
 
-  if (!dm_token.is_valid())
+  if (!dm_token.is_valid()) {
     return std::nullopt;
+  }
 
   return dm_token.value();
 }
@@ -463,12 +399,14 @@
   // from guest profiles, the menu item "New incognito window" is not
   // available.  So, if this is a guest session, allow it only if it is a
   // child OTR profile as well.
-  if (profile->IsGuestSession())
+  if (profile->IsGuestSession()) {
     return profile->GetOriginalProfile() != profile;
+  }
 
   // Never allow system profiles.
-  if (profile->IsSystemProfile())
+  if (profile->IsSystemProfile()) {
     return false;
+  }
 #endif
 
   return !profile->IsOffTheRecord() || profile->IsGuestSession();
@@ -482,15 +420,6 @@
   return Profile::FromBrowserContext(context_)->GetPrefs();
 }
 
-ConnectorsManagerBase* ConnectorsService::GetConnectorsManagerBase() {
-  return connectors_manager_.get();
-}
-
-const ConnectorsManagerBase* ConnectorsService::GetConnectorsManagerBase()
-    const {
-  return connectors_manager_.get();
-}
-
 policy::CloudPolicyManager*
 ConnectorsService::GetManagedUserCloudPolicyManager() const {
   return Profile::FromBrowserContext(context_)->GetCloudPolicyManager();
diff --git a/chrome/browser/enterprise/connectors/connectors_service.h b/chrome/browser/enterprise/connectors/connectors_service.h
index d2f0fe1..0d7b5997 100644
--- a/chrome/browser/enterprise/connectors/connectors_service.h
+++ b/chrome/browser/enterprise/connectors/connectors_service.h
@@ -17,7 +17,6 @@
 #include "components/enterprise/connectors/core/connectors_service_base.h"
 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
-#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
 #include "content/public/browser/browser_context.h"
 
 namespace base {
@@ -35,7 +34,7 @@
 class ConnectorsService : public ConnectorsServiceBase, public KeyedService {
  public:
   ConnectorsService(content::BrowserContext* context,
-                    std::unique_ptr<ConnectorsManager> manager);
+                    std::unique_ptr<ConnectorsManagerBase> manager);
   ~ConnectorsService() override;
 
   // Accessors that call the corresponding method in ConnectorsManager.
@@ -50,30 +49,10 @@
       AnalysisConnector connector);
 #endif  // BUILDFLAG(IS_CHROMEOS)
 
-  bool DelayUntilVerdict(AnalysisConnector connector);
-
-  // Gets custom message if set by the admin.
-  std::optional<std::u16string> GetCustomMessage(AnalysisConnector connector,
-                                                 const std::string& tag);
-
-  // Gets custom learn more URL if provided by the admin.
-  std::optional<GURL> GetLearnMoreUrl(AnalysisConnector connector,
-                                      const std::string& tag);
-
-  // Returns true if the admin enabled Bypass Justification.
-  bool GetBypassJustificationRequired(AnalysisConnector connector,
-                                      const std::string& tag);
-
   // Returns true if the admin has opted into custom message, learn more URL or
   // letting the user provide bypass justifications in an input dialog.
   bool HasExtraUiToDisplay(AnalysisConnector connector, const std::string& tag);
 
-  std::vector<std::string> GetAnalysisServiceProviderNames(
-      AnalysisConnector connector);
-
-  std::vector<const AnalysisConfig*> GetAnalysisServiceConfigs(
-      AnalysisConnector connector);
-
   // Returns the profile email if real-time URL check is set for the profile,
   // the device ID if it is set for the device, or an empty string if it is
   // unset.
@@ -84,14 +63,7 @@
   // precedence.
   std::string GetManagementDomain();
 
-  // Testing functions.
-  ConnectorsManager* ConnectorsManagerForTesting();
-
-  // Observe if reporting policies have changed to include telemetry event.
-  void ObserveTelemetryReporting(base::RepeatingCallback<void()> callback);
-
   // ConnectorsServiceBase:
-  bool IsConnectorEnabled(AnalysisConnector connector) const override;
   std::optional<std::string> GetBrowserDmToken() const override;
   std::unique_ptr<ClientMetadata> BuildClientMetadata(bool is_cloud) override;
 
@@ -111,8 +83,6 @@
   bool ConnectorsEnabled() const override;
   PrefService* GetPrefs() override;
   const PrefService* GetPrefs() const override;
-  ConnectorsManagerBase* GetConnectorsManagerBase() override;
-  const ConnectorsManagerBase* GetConnectorsManagerBase() const override;
   policy::CloudPolicyManager* GetManagedUserCloudPolicyManager() const override;
 
   // Returns the policy::PolicyScope stored in the given |scope_pref|.
@@ -122,7 +92,6 @@
   std::unique_ptr<ClientMetadata> GetBasicClientMetadata(Profile* profile);
 
   raw_ptr<content::BrowserContext> context_;
-  std::unique_ptr<ConnectorsManager> connectors_manager_;
 };
 
 class ConnectorsServiceFactory : public BrowserContextKeyedServiceFactory {
diff --git a/chrome/browser/enterprise/connectors/connectors_service_unittest.cc b/chrome/browser/enterprise/connectors/connectors_service_unittest.cc
index 1cbea2f7..1f73ac5 100644
--- a/chrome/browser/enterprise/connectors/connectors_service_unittest.cc
+++ b/chrome/browser/enterprise/connectors/connectors_service_unittest.cc
@@ -252,17 +252,18 @@
 TEST_P(ConnectorsServiceReportingFeatureTest, CheckTelemetryPolicyObserver) {
   ConnectorsService* connectors_service =
       ConnectorsServiceFactory::GetForBrowserContext(profile_);
-  ConnectorsManager* connectors_manager =
-      connectors_service->ConnectorsManagerForTesting();
+  ConnectorsManagerBase* connectors_manager_base =
+      connectors_service->ConnectorsManagerBaseForTesting();
 
   base::test::TestFuture<void> future;
   connectors_service->ObserveTelemetryReporting(future.GetRepeatingCallback());
 
-  ASSERT_FALSE(
-      connectors_manager->GetTelemetryObserverCallbackForTesting().is_null());
+  ASSERT_FALSE(connectors_manager_base->GetTelemetryObserverCallbackForTesting()
+                   .is_null());
   // Cache initially empty
   ASSERT_TRUE(
-      connectors_manager->GetReportingConnectorsSettingsForTesting().empty());
+      connectors_manager_base->GetReportingConnectorsSettingsForTesting()
+          .empty());
 
   // Enable browser crash event
   test::SetOnSecurityEventReporting(pref_service(), true, {kBrowserCrashEvent},
@@ -272,7 +273,8 @@
   // Clear enabled events (not cached when cleared)
   test::SetOnSecurityEventReporting(pref_service(), false, {}, {});
   ASSERT_TRUE(
-      connectors_manager->GetReportingConnectorsSettingsForTesting().empty());
+      connectors_manager_base->GetReportingConnectorsSettingsForTesting()
+          .empty());
   EXPECT_TRUE(future.WaitAndClear());
 
   // Enable telemetry event
diff --git a/chrome/browser/enterprise/encryption/OWNERS b/chrome/browser/enterprise/encryption/OWNERS
new file mode 100644
index 0000000..7b0e0af
--- /dev/null
+++ b/chrome/browser/enterprise/encryption/OWNERS
@@ -0,0 +1,3 @@
+haihan@google.com
+
+cep-review@google.com
\ No newline at end of file
diff --git a/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.cc b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.cc
new file mode 100644
index 0000000..f690d6e
--- /dev/null
+++ b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.cc
@@ -0,0 +1,31 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/enterprise/encryption/cache_encryption_provider_impl.h"
+
+#include "components/os_crypt/async/browser/os_crypt_async.h"
+
+namespace enterprise_encryption {
+
+CacheEncryptionProviderImpl::CacheEncryptionProviderImpl(
+    os_crypt_async::OSCryptAsync* os_crypt_async)
+    : os_crypt_async_(os_crypt_async) {}
+
+CacheEncryptionProviderImpl::~CacheEncryptionProviderImpl() = default;
+
+void CacheEncryptionProviderImpl::GetEncryptor(GetEncryptorCallback callback) {
+  os_crypt_async_->GetInstance(std::move(callback));
+}
+
+mojo::PendingRemote<
+    network::mojom::CacheEncryptionProvider>
+CacheEncryptionProviderImpl::BindNewRemote() {
+  mojo::PendingRemote<
+      network::mojom::CacheEncryptionProvider>
+      pending_remote;
+  receivers_.Add(this, pending_remote.InitWithNewPipeAndPassReceiver());
+  return pending_remote;
+}
+
+}  // namespace enterprise_encryption
\ No newline at end of file
diff --git a/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.h b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.h
new file mode 100644
index 0000000..9ac8ad7
--- /dev/null
+++ b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl.h
@@ -0,0 +1,47 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ENTERPRISE_ENCRYPTION_CACHE_ENCRYPTION_PROVIDER_IMPL_H_
+#define CHROME_BROWSER_ENTERPRISE_ENCRYPTION_CACHE_ENCRYPTION_PROVIDER_IMPL_H_
+
+#include "base/component_export.h"
+#include "base/memory/raw_ptr.h"
+#include "services/network/public/mojom/cache_encryption_provider.mojom.h"
+#include "mojo/public/cpp/bindings/receiver_set.h"
+
+namespace os_crypt_async {
+class OSCryptAsync;
+}
+
+namespace enterprise_encryption {
+
+// Implementation of CacheEncryptionProvider interface.
+class CacheEncryptionProviderImpl : public network::mojom::CacheEncryptionProvider {
+ public:
+  explicit CacheEncryptionProviderImpl(
+      os_crypt_async::OSCryptAsync* os_crypt_async);
+  ~CacheEncryptionProviderImpl() override;
+
+  CacheEncryptionProviderImpl(const CacheEncryptionProviderImpl&) = delete;
+  CacheEncryptionProviderImpl& operator=(const CacheEncryptionProviderImpl&) =
+      delete;
+
+  // mojom::CacheEncryptionProvider implementation.
+  void GetEncryptor(GetEncryptorCallback callback) override;
+
+  // Returns a mojo::PendingRemote to this instance.
+  mojo::PendingRemote<
+      network::mojom::CacheEncryptionProvider>
+  BindNewRemote();
+
+ private:
+  mojo::ReceiverSet<
+      network::mojom::CacheEncryptionProvider>
+      receivers_;
+  raw_ptr<os_crypt_async::OSCryptAsync> os_crypt_async_;
+};
+
+}  // namespace enterprise_encryption
+
+#endif  // CHROME_BROWSER_ENTERPRISE_ENCRYPTION_CACHE_ENCRYPTION_PROVIDER_IMPL_H_
diff --git a/chrome/browser/enterprise/encryption/cache_encryption_provider_impl_unittest.cc b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl_unittest.cc
new file mode 100644
index 0000000..436fc3f
--- /dev/null
+++ b/chrome/browser/enterprise/encryption/cache_encryption_provider_impl_unittest.cc
@@ -0,0 +1,88 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/enterprise/encryption/cache_encryption_provider_impl.h"
+
+#include "base/test/task_environment.h"
+#include "components/os_crypt/async/browser/os_crypt_async.h"
+#include <optional>
+
+#include "base/test/bind.h"
+#include "components/os_crypt/async/common/encryptor.h"
+#include "crypto/aead.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "services/network/public/mojom/cache_encryption_provider.mojom.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace enterprise_encryption {
+
+namespace {
+
+class MockOSCryptAsync : public os_crypt_async::OSCryptAsync {
+ public:
+  MockOSCryptAsync() : OSCryptAsync({}) {}
+  ~MockOSCryptAsync() override = default;
+
+  MOCK_METHOD(void,
+              GetInstance,
+              (base::OnceCallback<void(os_crypt_async::Encryptor)>,
+               os_crypt_async::Encryptor::Option),
+              (override));
+};
+
+// Helper for creating an Encryptor for testing.
+class TestEncryptor : public os_crypt_async::Encryptor {
+ public:
+  TestEncryptor(
+      KeyRing keys,
+      const std::string& provider_for_encryption,
+      const std::string& provider_for_os_crypt_sync_compatible_encryption)
+      : Encryptor(std::move(keys),
+                  provider_for_encryption,
+                  provider_for_os_crypt_sync_compatible_encryption) {}
+};
+
+}  // namespace
+
+class CacheEncryptionProviderImplTest : public testing::Test {
+ public:
+  CacheEncryptionProviderImplTest() = default;
+  ~CacheEncryptionProviderImplTest() override = default;
+
+ protected:
+  base::test::TaskEnvironment task_environment_;
+  testing::StrictMock<MockOSCryptAsync> os_crypt_async_;
+  CacheEncryptionProviderImpl provider_{&os_crypt_async_};
+};
+
+TEST_F(CacheEncryptionProviderImplTest, GetEncryptor) {
+  std::optional<os_crypt_async::Encryptor> returned_encryptor;
+  base::RunLoop run_loop;
+  EXPECT_CALL(os_crypt_async_, GetInstance)
+      .WillOnce([&](base::OnceCallback<void(os_crypt_async::Encryptor)> cb,
+                    os_crypt_async::Encryptor::Option option) {
+        os_crypt_async::Encryptor::KeyRing keys;
+        keys.emplace("test_provider",
+                     os_crypt_async::Encryptor::Key(
+                         std::vector<uint8_t>(32, 1),
+                         os_crypt_async::mojom::Algorithm::kAES256GCM));
+        std::move(cb).Run(TestEncryptor(std::move(keys), "test_provider",
+                                        "test_provider"));
+      });
+
+  mojo::Remote<network::mojom::CacheEncryptionProvider> remote(
+      provider_.BindNewRemote());
+
+  remote->GetEncryptor(
+      base::BindLambdaForTesting([&](os_crypt_async::Encryptor encryptor_arg) {
+        returned_encryptor.emplace(std::move(encryptor_arg));
+        run_loop.Quit();
+      }));
+  run_loop.Run();
+
+  EXPECT_TRUE(returned_encryptor.has_value());
+}
+
+}  // namespace enterprise_encryption
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc
index 1001a2c..aa381ca 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -51,6 +51,7 @@
 #include "chrome/browser/icon_manager.h"
 #include "chrome/browser/platform_util.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/extensions/extensions_dialogs.h"
 #include "chrome/common/extensions/api/downloads.h"
 #include "components/download/public/common/download_danger_type.h"
 #include "components/download/public/common/download_interrupt_reasons.h"
@@ -87,7 +88,6 @@
 
 #if BUILDFLAG(ENABLE_EXTENSIONS)
 #include "chrome/browser/download/download_danger_prompt.h"
-#include "chrome/browser/download/download_open_dialog.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
 #endif
@@ -1546,7 +1546,7 @@
   // TODO(qinmin): check if user prefers to open all download using the same
   // extension, or check the recent user gesture on the originating webcontents
   // to avoid showing the prompt.
-#if BUILDFLAG(ENABLE_EXTENSIONS)
+
   // For testing, callers can use AcceptDialogForTesting() to pre-determine
   // the dialog's result. This bypasses showing the dialog.
   if (g_accept_open_dialog_for_testing) {
@@ -1554,16 +1554,13 @@
     OpenPromptDone(params->download_id, /*accept=*/true);
     return RespondLater();
   }
-  ShowDownloadOpenConfirmationDialog(
+
+  extensions::ShowDownloadOpenConfirmationDialog(
       active_contents, extension()->name(), download_item->GetFullPath(),
       base::BindOnce(&DownloadsOpenFunction::OpenPromptDone, this,
                      params->download_id));
   RecordApiFunctions(DownloadsFunctionName::kDownloadsFunctionOpen);
   return RespondLater();
-#else
-  NOTIMPLEMENTED();
-  return RespondNow(Error("DownloadOpenPrompt not implemented"));
-#endif
 }
 
 // static
diff --git a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
index c91bae7a..e2027d6 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
@@ -38,7 +38,6 @@
 #include "chrome/browser/download/download_core_service.h"
 #include "chrome/browser/download/download_core_service_factory.h"
 #include "chrome/browser/download/download_file_icon_extractor.h"
-#include "chrome/browser/download/download_open_dialog.h"
 #include "chrome/browser/download/download_prefs.h"
 #include "chrome/browser/download/download_test_file_activity_observer.h"
 #include "chrome/browser/extensions/api/downloads/download_extension_errors.h"
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/chrome_desktop_report_request_helper.cc b/chrome/browser/extensions/api/enterprise_reporting_private/chrome_desktop_report_request_helper.cc
index 50afe42..a54feb2f 100644
--- a/chrome/browser/extensions/api/enterprise_reporting_private/chrome_desktop_report_request_helper.cc
+++ b/chrome/browser/extensions/api/enterprise_reporting_private/chrome_desktop_report_request_helper.cc
@@ -32,7 +32,7 @@
 #if BUILDFLAG(IS_MAC)
 #include "base/apple/foundation_util.h"
 #include "chrome/browser/extensions/api/enterprise_reporting_private/keychain_data_helper_mac.h"
-#include "crypto/apple/keychain.h"
+#include "crypto/apple/scoped_keychain_user_interaction_allowed.h"
 #include "crypto/apple/security_framework_lock.h"
 #endif
 
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc
index cd37abe..f47252a 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -806,7 +806,6 @@
     window_type = tabs::ToString(query_info_.window_type);
   }
 
-  base::Value::List result;
   Profile* profile = Profile::FromBrowserContext(browser_context());
   BrowserWindowInterface* last_active_browser =
       browser_window_util::GetLastActiveBrowserWithProfile(
@@ -822,6 +821,21 @@
     // Note: current_browser may still be null.
   }
 
+  base::Value::List result =
+      BuildTabList(current_browser, last_active_browser, url_patterns,
+                   window_type, window_id, index);
+
+  return RespondNow(WithArguments(std::move(result)));
+}
+
+base::Value::List TabsQueryFunction::BuildTabList(
+    BrowserWindowInterface* current_browser,
+    BrowserWindowInterface* last_active_browser,
+    const URLPatternSet& url_patterns,
+    const std::string& window_type,
+    int window_id,
+    int tab_index) {
+  base::Value::List result;
   // Historically, we queried browsers in creation order. Maintain that behavior
   // (for now).
   std::vector<BrowserWindowInterface*> all_browsers =
@@ -834,7 +848,7 @@
 
     TabListInterface* tab_list = TabListInterface::From(browser);
     for (int i = 0; i < tab_list->GetTabCount(); ++i) {
-      if (index > -1 && i != index) {
+      if (tab_index > -1 && i != tab_index) {
         continue;
       }
 
@@ -851,8 +865,7 @@
                         .ToValue());
     }
   }
-
-  return RespondNow(WithArguments(std::move(result)));
+  return result;
 }
 
 bool TabsQueryFunction::MatchesProfile(Profile* candidate_profile) {
@@ -1508,6 +1521,13 @@
     return RespondNow(Error(kCannotDetermineLanguageOfUnloadedTab));
   }
 
+  // Language detection is asynchronous.
+  return StartLanguageDetection(contents);
+}
+
+TabsDetectLanguageFunction::ResponseAction
+TabsDetectLanguageFunction::StartLanguageDetection(
+    content::WebContents* contents) {
   AddRef();  // Balanced in RespondWithLanguage().
 
   ChromeTranslateClient* chrome_translate_client =
@@ -1532,7 +1552,6 @@
   chrome_translate_client->GetTranslateDriver()->AddLanguageDetectionObserver(
       this);
   is_observing_ = true;
-
   return RespondLater();
 }
 
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.h b/chrome/browser/extensions/api/tabs/tabs_api.h
index 13302bd..b99335aa 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.h
+++ b/chrome/browser/extensions/api/tabs/tabs_api.h
@@ -252,6 +252,14 @@
  private:
   ~TabsQueryFunction() override = default;
 
+  // Builds the list of tab objects to return.
+  base::Value::List BuildTabList(BrowserWindowInterface* current_browser,
+                                 BrowserWindowInterface* last_active_browser,
+                                 const URLPatternSet& url_patterns,
+                                 const std::string& window_type,
+                                 int window_id,
+                                 int tab_index);
+
   // Returns true if the given `candidate_profile` matches the calling
   // extension's profile (taking into account incognito access).
   bool MatchesProfile(Profile* candidate_profile);
@@ -359,6 +367,9 @@
   ~TabsDetectLanguageFunction() override = default;
   ResponseAction Run() override;
 
+  // Starts the language detection process, which is asynchronous.
+  ResponseAction StartLanguageDetection(content::WebContents* contents);
+
   // content::WebContentsObserver:
   void NavigationEntryCommitted(
       const content::LoadCommittedDetails& load_details) override;
diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc
index 87ccb36..2a1173b 100644
--- a/chrome/browser/extensions/extension_install_prompt.cc
+++ b/chrome/browser/extensions/extension_install_prompt.cc
@@ -295,33 +295,48 @@
   return l10n_util::GetStringUTF16(id);
 }
 
-void ExtensionInstallPrompt::Prompt::AppendRatingStars(
-    StarAppender appender, void* data) const {
-  CHECK(appender);
+std::vector<const gfx::ImageSkia*>
+ExtensionInstallPrompt::Prompt::GetRatingStars() const {
   CHECK(AllowWebstoreData(type_));
-  int rating_integer = floor(average_rating_);
-  double rating_fractional = average_rating_ - rating_integer;
+
+  // The star display logic replicates the one used by the webstore (from
+  // components.ratingutils.setFractionalYellowStars).
+  int full_stars = floor(average_rating_);
+  double rating_fractional = average_rating_ - full_stars;
 
   if (rating_fractional > 0.66) {
-    rating_integer++;
+    // Show one more full star (e.g. 3.67 stars is shown as 4 full stars)
+    full_stars += 1;
   }
 
   if (rating_fractional < 0.33 || rating_fractional > 0.66) {
+    // Do not show a half star.
+    // E.g.:
+    //   - 3.32 stars is shown as 3 full stars
+    //   - 3.33 stars is shown as 3.5 full stars
+    //   - 3.66 stars is shown as 3.5 full stars
+    //   - 3.67 stars is shown as 4 full stars
     rating_fractional = 0;
   }
 
+  std::vector<const gfx::ImageSkia*> star_images;
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
-  int i;
-  for (i = 0; i < rating_integer; i++) {
-    appender(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_ON), data);
-  }
-  if (rating_fractional) {
-    appender(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_HALF_LEFT), data);
+
+  int i = 0;
+  while (i < full_stars) {
+    star_images.push_back(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_ON));
     i++;
   }
-  for (; i < kMaxExtensionRating; i++) {
-    appender(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_OFF), data);
+  if (rating_fractional) {
+    star_images.push_back(
+        rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_HALF_LEFT));
+    i++;
   }
+  while (i < kMaxExtensionRating) {
+    star_images.push_back(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_OFF));
+    i++;
+  }
+  return star_images;
 }
 
 std::u16string ExtensionInstallPrompt::Prompt::GetRatingCount() const {
diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h
index a558d7d5..4aa10ca4 100644
--- a/chrome/browser/extensions/extension_install_prompt.h
+++ b/chrome/browser/extensions/extension_install_prompt.h
@@ -141,13 +141,7 @@
 
     // Getters for webstore metadata. Only populated when the type is
     // INLINE_INSTALL_PROMPT, EXTERNAL_INSTALL_PROMPT, or REPAIR_PROMPT.
-
-    // The star display logic replicates the one used by the webstore (from
-    // components.ratingutils.setFractionalYellowStars). Callers pass in an
-    // "appender", which will be repeatedly called back with the star images
-    // that they append to the star display area.
-    typedef void(*StarAppender)(const gfx::ImageSkia*, void*);
-    void AppendRatingStars(StarAppender appender, void* data) const;
+    std::vector<const gfx::ImageSkia*> GetRatingStars() const;
     std::u16string GetRatingCount() const;
     std::u16string GetUserCount() const;
     size_t GetPermissionCount() const;
diff --git a/chrome/browser/extensions/extension_override_apitest.cc b/chrome/browser/extensions/extension_override_apitest.cc
index 2fb5078..6f63d15f 100644
--- a/chrome/browser/extensions/extension_override_apitest.cc
+++ b/chrome/browser/extensions/extension_override_apitest.cc
@@ -285,14 +285,7 @@
   EXPECT_TRUE(contents->GetRenderWidgetHostView()->HasFocus());
 }
 
-// Times out consistently on Win, http://crbug.com/45173.
-#if BUILDFLAG(IS_WIN)
-#define MAYBE_OverrideHistory DISABLED_OverrideHistory
-#else
-#define MAYBE_OverrideHistory OverrideHistory
-#endif  // BUILDFLAG(IS_WIN)
-
-IN_PROC_BROWSER_TEST_F(ExtensionOverrideTest, MAYBE_OverrideHistory) {
+IN_PROC_BROWSER_TEST_F(ExtensionOverrideTest, OverrideHistory) {
   ASSERT_TRUE(RunExtensionTest("override/history")) << message_;
   {
     ResultCatcher catcher;
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 1b949fe..f995e0a 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -5701,7 +5701,7 @@
     "owners": [ "//chrome/browser/ui/hats/OWNERS" ],
     // A debugging and demo flag to allow UI/dev/testing team to always show the UI
     // components for the survey without being limited by the triggering mechanism.
-    "expiry_milestone": 140
+    "expiry_milestone": 150
   },
   {
     "name": "happy-eyeballs-v3",
@@ -5718,7 +5718,7 @@
     "owners": [
       "//chrome/browser/ui/hats/OWNERS"
     ],
-    "expiry_milestone": 126
+    "expiry_milestone": 150
   },
   {
     "name": "hdr-agtm",
@@ -8044,11 +8044,6 @@
     "expiry_milestone": 150
   },
   {
-    "name": "page-content-annotations-persist-salient-image-metadata",
-    "owners": [ "sophiechang@chromium.org", "chrome-intelligence-core@google.com"],
-    "expiry_milestone": 130
-  },
-  {
     "name": "page-content-annotations-remote-page-metadata",
     "owners": [ "sophiechang@chromium.org", "chrome-intelligence-core@google.com"],
     "expiry_milestone": 150
@@ -8513,6 +8508,11 @@
     "expiry_milestone": 150
   },
   {
+    "name": "profile-creation-friction-reduction-experiment",
+    "owners": [ "kbajkiewicz@google.com", "chrome-signin-desktop-team@google.com" ],
+    "expiry_milestone": 160
+  },
+  {
     "name": "profile-picker-text-variations",
     "owners": [ "saskekun@google.com", "chrome-signin-desktop-team@google.com" ],
     "expiry_milestone": 150
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index c38f322..ba20bde 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -3342,13 +3342,6 @@
 inline constexpr char kPageContentAnnotationsDescription[] =
     "Enables page content to be annotated on-device.";
 
-inline constexpr char kPageContentAnnotationsPersistSalientImageMetadataName[] =
-    "Page content annotations - Persist salient image metadata";
-inline constexpr char
-    kPageContentAnnotationsPersistSalientImageMetadataDescription[] =
-        "Enables salient image metadata per page load to be persisted "
-        "on-device.";
-
 inline constexpr char kPageContentAnnotationsRemotePageMetadataName[] =
     "Page content annotations - Remote page metadata";
 inline constexpr char kPageContentAnnotationsRemotePageMetadataDescription[] =
@@ -4054,6 +4047,12 @@
     "As part of the Profile experiments, enables variations of the profile "
     "picker text.";
 
+inline constexpr char kProfileCreationFrictionReductionExperimentName[] =
+    "Profile Creation Friction Reduction";
+inline constexpr char kProfileCreationFrictionReductionExperimentDescription[] =
+    "As part of the Profile experiments, changes parts of the profile creation "
+    "flow to reduce friction.";
+
 inline constexpr char kShowProfilePickerToAllUsersExperimentName[] =
     "Show profile picker to all users";
 inline constexpr char kShowProfilePickerToAllUsersExperimentDescription[] =
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 54aacf4..5f5ad9ee 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -511,7 +511,6 @@
     &sensitive_content::features::kSensitiveContent,
     &sensitive_content::features::kSensitiveContentWhileSwitchingTabs,
     &supervised_user::kPropagateDeviceContentFiltersToSupervisedUser,
-    &switches::kMitigateLegacySearchEnginePromoOverlap,
     &switches::kRestrictLegacySearchEnginePromoOnFormFactors,
     &sync_sessions::kOptimizeAssociateWindowsAndroid,
     &syncer::kSyncEnableNewSyncDashboardUrl,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index 9cdf82d..7b255a10 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -500,8 +500,6 @@
             "MayLaunchUrlUsesSeparateStoragePartition";
     public static final String MEDIA_INDICATORS_ANDROID = "MediaIndicatorsAndroid";
     public static final String MINI_ORIGIN_BAR = "MiniOriginBar";
-    public static final String MITIGATE_LEGACY_SEARCH_ENGINE_PROMO_OVERLAP =
-            "MitigateLegacySearchEnginePromoOverlap";
     public static final String MOST_VISITED_TILES_CUSTOMIZATION = "MostVisitedTilesCustomization";
     public static final String MOST_VISITED_TILES_RESELECT = "MostVisitedTilesReselect";
     public static final String MULTI_INSTANCE_APPLICATION_STATUS_CLEANUP =
@@ -989,8 +987,6 @@
                     /* defaultValue= */ false,
                     /* defaultValueInTests= */ true);
     public static final CachedFlag sMiniOriginBar = newCachedFlag(MINI_ORIGIN_BAR, true, true);
-    public static final CachedFlag sMitigateLegacySearchEnginePromoOverlap =
-            newCachedFlag(MITIGATE_LEGACY_SEARCH_ENGINE_PROMO_OVERLAP, true, true);
     public static final CachedFlag sMostVisitedTilesCustomization =
             newCachedFlag(
                     MOST_VISITED_TILES_CUSTOMIZATION,
@@ -1243,7 +1239,6 @@
                     sMagicStackAndroid,
                     sMaliciousApkDownloadCheck,
                     sMiniOriginBar,
-                    sMitigateLegacySearchEnginePromoOverlap,
                     sMostVisitedTilesCustomization,
                     sMostVisitedTilesReselect,
                     sMultiInstanceApplicationStatusCleanup,
diff --git a/chrome/browser/focus_ring_browsertest.cc b/chrome/browser/focus_ring_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/focus_ring_browsertest.cc
rename to chrome/browser/focus_ring_interactive_uitest.cc
diff --git a/chrome/browser/glic/BUILD.gn b/chrome/browser/glic/BUILD.gn
index 31ed1bb..e355807 100644
--- a/chrome/browser/glic/BUILD.gn
+++ b/chrome/browser/glic/BUILD.gn
@@ -366,6 +366,7 @@
     "//chrome/browser/glic/media:unit_tests",
     "//chrome/browser/glic/test_support",
     "//chrome/browser/prefs",
+    "//chrome/browser/startup",
     "//chrome/browser/status_icons",
     "//chrome/browser/ui",
     "//chrome/browser/ui:ui_features",
diff --git a/chrome/browser/glic/glic_metrics_unittest.cc b/chrome/browser/glic/glic_metrics_unittest.cc
index d2fa0a3..d0ec81c5 100644
--- a/chrome/browser/glic/glic_metrics_unittest.cc
+++ b/chrome/browser/glic/glic_metrics_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/metrics/user_action_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "chrome/browser/background/startup_launch_manager.h"
 #include "chrome/browser/glic/glic_pref_names.h"
 #include "chrome/browser/glic/host/context/glic_focused_tab_manager.h"
 #include "chrome/browser/glic/host/context/glic_tab_data.h"
@@ -20,6 +19,7 @@
 #include "chrome/browser/glic/test_support/glic_test_util.h"
 #include "chrome/browser/glic/widget/glic_window_controller.h"
 #include "chrome/browser/global_features.h"
+#include "chrome/browser/startup/startup_launch_manager.h"
 #include "chrome/browser/status_icons/status_icon.h"
 #include "chrome/browser/status_icons/status_icon_menu_model.h"
 #include "chrome/browser/status_icons/status_tray.h"
diff --git a/chrome/browser/glic/host/glic_api_browsertest.cc b/chrome/browser/glic/host/glic_api_browsertest.cc
index 80644fe..3ae2d1e 100644
--- a/chrome/browser/glic/host/glic_api_browsertest.cc
+++ b/chrome/browser/glic/host/glic_api_browsertest.cc
@@ -604,7 +604,9 @@
 IN_PROC_BROWSER_TEST_P(GlicApiTest, testLoadWhileWindowClosed) {
   RunTestSequence(
       OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kNone),
-      CloseGlic());
+      // Registering a conversation id ensures that the instance isn't deleted
+      // as soon as the side panel is closed.
+      RegisterConversation("test-id"), CloseGlic());
   ExecuteJsTest();
   // Make sure the WebUI transitions to kReady, otherwise the web client may be
   // destroyed.
@@ -617,7 +619,9 @@
   // Fail client initialization, should see error page.
   RunTestSequence(
       OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kNone),
-      CloseGlic());
+      // Registering a conversation id ensures that the instance isn't deleted
+      // as soon as the side panel is closed.
+      RegisterConversation("test-id"), CloseGlic());
   ExecuteJsTest();
   WaitForWebUiState(mojom::WebUiState::kError);
   histogram_tester.ExpectUniqueSample(
@@ -2116,7 +2120,8 @@
   // Client loads, and navigates to a new URL. We try to load the client again,
   // but it fails.
   RunTestSequence(OpenGlicWindow(GlicWindowMode::kDetached,
-                                 GlicInstrumentMode::kHostAndContents));
+                                 GlicInstrumentMode::kHostAndContents),
+                  RegisterConversation("test-id"));
   WebUIStateListener listener(GetHost());
   listener.WaitForWebUiState(mojom::WebUiState::kReady);
   ExecuteJsTest({.params = base::Value(0)});
@@ -2635,6 +2640,21 @@
   ContinueJsTest();
 }
 
+IN_PROC_BROWSER_TEST_P(GlicApiTest, testRemoveBlankInstanceOnClose) {
+  if (!GetParam().multi_instance) {
+    GTEST_SKIP() << "Only supported in multi-instance mode.";
+  }
+
+  RunTestSequence(
+      InstrumentTab(kFirstTab),
+      OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kNone));
+  ASSERT_EQ(1u, GetService()->window_controller().GetInstances().size());
+  ExecuteJsTest();
+  ASSERT_TRUE(base::test::RunUntil([&]() {
+    return GetService()->window_controller().GetInstances().size() == 0u;
+  }));
+}
+
 IN_PROC_BROWSER_TEST_P(GlicApiTestWithOneTab,
                        testSwitchConversationToExistingInstance) {
   if (!GetParam().multi_instance) {
diff --git a/chrome/browser/glic/host/glic_page_handler.cc b/chrome/browser/glic/host/glic_page_handler.cc
index e6580b74..10f5e7a 100644
--- a/chrome/browser/glic/host/glic_page_handler.cc
+++ b/chrome/browser/glic/host/glic_page_handler.cc
@@ -1663,8 +1663,12 @@
   void NotifyZeroStateSuggestionsChanged(
       glic::mojom::ZeroStateSuggestionsV2Ptr suggestions,
       mojom::ZeroStateSuggestionsOptionsPtr options) {
-    web_client_->NotifyZeroStateSuggestionsChanged(std::move(suggestions),
-                                                   std::move(options));
+    // Ideally, we should redesign this to avoid zss suggestions being delivered
+    // when there's no client.
+    if (web_client_) {
+      web_client_->NotifyZeroStateSuggestionsChanged(std::move(suggestions),
+                                                     std::move(options));
+    }
   }
 
   void NotifyActOnWebCapabilityChanged(bool can_act_on_web) {
diff --git a/chrome/browser/glic/service/glic_instance_impl.cc b/chrome/browser/glic/service/glic_instance_impl.cc
index 3aa88eb..0a0bb68 100644
--- a/chrome/browser/glic/service/glic_instance_impl.cc
+++ b/chrome/browser/glic/service/glic_instance_impl.cc
@@ -38,6 +38,7 @@
 #include "chrome/browser/ui/browser_window/public/browser_window_interface_iterator.h"
 #include "chrome/browser/ui/tabs/public/tab_features.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h"
 #include "chrome/common/actor_webui.mojom.h"
 #include "chrome/common/chrome_features.h"
 #include "components/prefs/pref_service.h"
@@ -56,6 +57,11 @@
              base::FEATURE_ENABLED_BY_DEFAULT);
 BASE_FEATURE(kGlicBindOnPinFromFloatingUiDoesntShowSidePanel,
              base::FEATURE_ENABLED_BY_DEFAULT);
+BASE_FEATURE(kGlicRemoveBlankInstancesOnClose,
+             base::FEATURE_ENABLED_BY_DEFAULT);
+
+const base::FeatureParam<base::TimeDelta> kRemoveBlankInstanceDelay{
+    &kGlicRemoveBlankInstancesOnClose, "delay", base::Seconds(1)};
 
 namespace {
 EmbedderKey CreateSidePanelEmbedderKey(tabs::TabInterface* tab) {
@@ -308,7 +314,6 @@
   }
   instance_metrics_.OnClose();
   embedder->Close();
-  MaybeDeactivateEmbedder(key);
 }
 
 bool GlicInstanceImpl::Toggle(ShowOptions&& options,
@@ -546,6 +551,8 @@
   }
 
   Close(key);
+  // Avoid dangling raw_ptr.
+  host_.SetDelegate(&empty_embedder_delegate_);
   embedders_.erase(key);
 }
 
@@ -935,6 +942,57 @@
   }
 
   NotifyInstanceActivationChanged(false);
+  // This call might delete `this`.
+  remove_blank_instance_timer_.Start(
+      FROM_HERE, kRemoveBlankInstanceDelay.Get(), this,
+      &GlicInstanceImpl::MaybeRemoveBlankInstanceOnClose);
+}
+
+void GlicInstanceImpl::MaybeRemoveBlankInstanceOnClose() {
+  if (!base::FeatureList::IsEnabled(kGlicRemoveBlankInstancesOnClose)) {
+    return;
+  }
+  // If the conversation id is set, then the instance isn't blank.
+  if (conversation_id().has_value()) {
+    return;
+  }
+  if (embedders_.size() != 1) {
+    return;
+  }
+
+  const auto& [key, entry] = *embedders_.begin();
+  tabs::TabInterface* const* tab = std::get_if<tabs::TabInterface*>(&key);
+  if (!tab) {
+    // The single embedder is not a side panel (e.g., it's a floating embedder).
+    return;
+  }
+
+  GlicSidePanelCoordinator* coordinator =
+      GlicSidePanelCoordinator::GetForTab(*tab);
+  if (!coordinator) {
+    return;
+  }
+  // Only delete the instance if the side panel is actually closed, as opposed
+  // to just being on a backgrounded tab.
+  if (coordinator->state() != GlicSidePanelCoordinator::State::kClosed) {
+    return;
+  }
+
+  // Only remove the instance if there are no pinned tabs, or if the only pinned
+  // tab is the one for this embedder.
+  if (sharing_manager_.GetNumPinnedTabs() > 1) {
+    return;
+  }
+  if (sharing_manager_.GetNumPinnedTabs() == 1 &&
+      !sharing_manager_.IsTabPinned((*tab)->GetHandle())) {
+    return;
+  }
+
+  UnbindEmbedder(*tab);
+  if (coordinator_delegate_) {
+    // This call will delete `this`.
+    coordinator_delegate_->RemoveInstance(this);
+  }
 }
 
 void GlicInstanceImpl::NotifyInstanceActivationChanged(bool is_active) {
@@ -943,6 +1001,7 @@
   if (is_active) {
     last_active_time_ = base::TimeTicks::Now();
     inactivity_timer_.Stop();
+    remove_blank_instance_timer_.Stop();
   } else {
     last_active_time_ = base::TimeTicks::Now();
     inactivity_timer_.Start(
diff --git a/chrome/browser/glic/service/glic_instance_impl.h b/chrome/browser/glic/service/glic_instance_impl.h
index 60178f61..31e03f53 100644
--- a/chrome/browser/glic/service/glic_instance_impl.h
+++ b/chrome/browser/glic/service/glic_instance_impl.h
@@ -316,6 +316,7 @@
   bool ShouldPinOnBind() const;
 
   void MaybeActivateForegroundEmbedder();
+  void MaybeRemoveBlankInstanceOnClose();
   EmbedderEntry& BindTab(tabs::TabInterface* tab);
   // For any pinned tab not already bound to a conversation bind it to this one.
   void OnTabPinningStatusChanged(tabs::TabInterface* tab, bool pinned);
@@ -390,6 +391,8 @@
   base::OneShotTimer inactivity_timer_;
   base::TimeTicks last_active_time_;
 
+  base::OneShotTimer remove_blank_instance_timer_;
+
   base::WeakPtrFactory<GlicInstanceImpl> weak_ptr_factory_{this};
 };
 
diff --git a/chrome/browser/glic/test_support/interactive_glic_test.h b/chrome/browser/glic/test_support/interactive_glic_test.h
index 1cee045b..aebba40 100644
--- a/chrome/browser/glic/test_support/interactive_glic_test.h
+++ b/chrome/browser/glic/test_support/interactive_glic_test.h
@@ -502,6 +502,21 @@
     });
   }
 
+  auto RegisterConversation(std::string conversation_id) {
+    return Api::Do([this, conversation_id]() {
+      if (base::FeatureList::IsEnabled(features::kGlicMultiInstance)) {
+        auto* instance = GetGlicInstanceImpl();
+        if (!instance) {
+          return;
+        }
+        auto conversation_info = glic::mojom::ConversationInfo::New();
+        conversation_info->conversation_id = conversation_id;
+        instance->RegisterConversation(std::move(conversation_info),
+                                       base::DoNothing());
+      }
+    });
+  }
+
   auto ClickWebuiCloseButton() {
     return ClickWebElement(TargetWebContents::kGlicWebUi, ".close-button");
   }
diff --git a/chrome/browser/glic/widget/inactive_view_controller.cc b/chrome/browser/glic/widget/inactive_view_controller.cc
index 5c6d3bd..097faf5 100644
--- a/chrome/browser/glic/widget/inactive_view_controller.cc
+++ b/chrome/browser/glic/widget/inactive_view_controller.cc
@@ -96,6 +96,7 @@
   card_view->layer()->SetFillsBoundsOpaquely(false);
   card_view->SetBackground(
       views::CreateRoundedRectBackground(kColorSidePanelBackground, 16));
+  card_view->SetVisible(false);
   card_view_tracker_.SetView(card_view.get());
 
   auto icon = std::make_unique<views::ImageView>(ui::ImageModel::FromImageSkia(
diff --git a/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListener.java b/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListener.java
index 01404d5..4dba12f 100644
--- a/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListener.java
+++ b/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListener.java
@@ -19,12 +19,14 @@
     private final Runnable mOnScrollUp;
     private final Runnable mOnScrollDown;
     private final long mThrottleMs;
-    private final int mScrollThreshold;
+    private final int mScrollUpThreshold;
+    private final int mScrollDownThreshold;
     private final Handler mHandler;
     private boolean mIsThrottled;
 
     private static final int DEFAULT_THROTTLE_MS = 50;
-    private static final int DEFAULT_SCROLL_THRESHOLD = 2;
+    private static final int DEFAULT_SCROLL_UP_THRESHOLD = 5;
+    private static final int DEFAULT_SCROLL_DOWN_THRESHOLD = 2;
 
     /**
      * Creates a new instance of {@link DirectionalScrollListener}.
@@ -33,7 +35,12 @@
      * @param onScrollDown The callback to invoke when scrolling down.
      */
     public DirectionalScrollListener(Runnable onScrollUp, Runnable onScrollDown) {
-        this(onScrollUp, onScrollDown, DEFAULT_THROTTLE_MS, DEFAULT_SCROLL_THRESHOLD);
+        this(
+                onScrollUp,
+                onScrollDown,
+                DEFAULT_THROTTLE_MS,
+                DEFAULT_SCROLL_UP_THRESHOLD,
+                DEFAULT_SCROLL_DOWN_THRESHOLD);
     }
 
     /**
@@ -44,7 +51,12 @@
      * @param throttleMs The minimum time in milliseconds between invocations of the callbacks.
      */
     public DirectionalScrollListener(Runnable onScrollUp, Runnable onScrollDown, long throttleMs) {
-        this(onScrollUp, onScrollDown, throttleMs, DEFAULT_SCROLL_THRESHOLD);
+        this(
+                onScrollUp,
+                onScrollDown,
+                throttleMs,
+                DEFAULT_SCROLL_UP_THRESHOLD,
+                DEFAULT_SCROLL_DOWN_THRESHOLD);
     }
 
     /**
@@ -57,10 +69,30 @@
      */
     public DirectionalScrollListener(
             Runnable onScrollUp, Runnable onScrollDown, long throttleMs, int scrollThreshold) {
+        this(onScrollUp, onScrollDown, throttleMs, scrollThreshold, scrollThreshold);
+    }
+
+    /**
+     * Creates a new instance of {@link DirectionalScrollListener}.
+     *
+     * @param onScrollUp The callback to invoke when scrolling up.
+     * @param onScrollDown The callback to invoke when scrolling down.
+     * @param throttleMs The minimum time in milliseconds between invocations of the callbacks.
+     * @param scrollUpThreshold The minimum scroll up distance in pixels to trigger the callbacks.
+     * @param scrollDownThreshold The minimum scroll down distance in pixels to trigger the
+     *     callbacks.
+     */
+    public DirectionalScrollListener(
+            Runnable onScrollUp,
+            Runnable onScrollDown,
+            long throttleMs,
+            int scrollUpThreshold,
+            int scrollDownThreshold) {
         mOnScrollUp = onScrollUp;
         mOnScrollDown = onScrollDown;
         mThrottleMs = throttleMs;
-        mScrollThreshold = scrollThreshold;
+        mScrollUpThreshold = scrollUpThreshold;
+        mScrollDownThreshold = scrollDownThreshold;
         mHandler = new Handler();
     }
 
@@ -70,16 +102,21 @@
             return;
         }
 
-        if (Math.abs(dy) < mScrollThreshold) {
+        if (dy > 0) {
+            if (dy < mScrollDownThreshold) {
+                return;
+            }
+            mOnScrollDown.run();
+        } else if (dy < 0) {
+            if (Math.abs(dy) < mScrollUpThreshold) {
+                return;
+            }
+            mOnScrollUp.run();
+        } else {
             return;
         }
 
         mIsThrottled = true;
-        if (dy > 0) {
-            mOnScrollDown.run();
-        } else if (dy < 0) {
-            mOnScrollUp.run();
-        }
         mHandler.postDelayed(() -> mIsThrottled = false, mThrottleMs);
     }
 }
diff --git a/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListenerUnitTest.java b/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListenerUnitTest.java
index 72ca7d8..5e2401a 100644
--- a/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListenerUnitTest.java
+++ b/chrome/browser/hub/android/java/src/org/chromium/chrome/browser/hub/DirectionalScrollListenerUnitTest.java
@@ -86,4 +86,36 @@
         verify(mOnScrollDown, times(2)).run();
         verify(mOnScrollUp, never()).run();
     }
+
+    @Test
+    @SmallTest
+    public void testDifferentThresholds() {
+        int scrollUpThreshold = 10;
+        int scrollDownThreshold = 20;
+        mListener =
+                new DirectionalScrollListener(
+                        mOnScrollUp, mOnScrollDown, 50, scrollUpThreshold, scrollDownThreshold);
+
+        // Test scroll down threshold.
+        mListener.onScrolled(mRecyclerView, 0, 15);
+        verify(mOnScrollDown, never()).run();
+        verify(mOnScrollUp, never()).run();
+
+        mListener.onScrolled(mRecyclerView, 0, 25);
+        verify(mOnScrollDown, times(1)).run();
+        verify(mOnScrollUp, never()).run();
+
+        // Wait for the throttle to expire.
+        ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
+
+        // Test scroll up threshold.
+        mListener.onScrolled(mRecyclerView, 0, -5);
+        verify(mOnScrollUp, never()).run();
+        // Verify scroll down didn't run again.
+        verify(mOnScrollDown, times(1)).run();
+
+        mListener.onScrolled(mRecyclerView, 0, -15);
+        verify(mOnScrollUp, times(1)).run();
+        verify(mOnScrollDown, times(1)).run();
+    }
 }
diff --git a/chrome/browser/importer/external_process_importer_client.cc b/chrome/browser/importer/external_process_importer_client.cc
index 6ee7a95..fd95043c 100644
--- a/chrome/browser/importer/external_process_importer_client.cc
+++ b/chrome/browser/importer/external_process_importer_client.cc
@@ -8,7 +8,6 @@
 
 #include "base/functional/bind.h"
 #include "base/strings/string_number_conversions.h"
-#include "build/build_config.h"
 #include "chrome/browser/importer/external_process_importer_host.h"
 #include "chrome/browser/importer/in_process_importer_bridge.h"
 #include "chrome/common/importer/firefox_importer_utils.h"
@@ -16,7 +15,6 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/user_data_importer/common/imported_bookmark_entry.h"
-#include "content/public/browser/child_process_host.h"
 #include "content/public/browser/service_process_host.h"
 #include "ui/base/l10n/l10n_util.h"
 
@@ -43,12 +41,6 @@
       profile_import_.BindNewPipeAndPassReceiver(),
       content::ServiceProcessHost::Options()
           .WithDisplayName(IDS_UTILITY_PROCESS_PROFILE_IMPORTER_NAME)
-#if BUILDFLAG(IS_MAC)
-          // Importing from Firefox involves loading a Firefox dylib into the
-          // importer service process. Use the child process that doesn't
-          // enforce library validation so that this will work.
-          .WithChildFlags(content::ChildProcessHost::CHILD_PLUGIN)
-#endif
           .Pass());
   profile_import_.set_disconnect_handler(
       base::BindOnce(&ExternalProcessImporterClient::OnProcessCrashed, this));
diff --git a/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java b/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java
index 8d385cb5..3d24ba7 100644
--- a/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java
+++ b/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java
@@ -88,14 +88,6 @@
      */
     public interface TabSwitchingDelegate {
         /**
-         * A {@link KeyboardAccessoryData.Tab} passed into this function will be represented as item
-         * at the start of the tab layout. It is meant to trigger various bottom sheets.
-         *
-         * @param tab The tab which contains representation data of a bottom sheet.
-         */
-        void addTab(KeyboardAccessoryData.Tab tab);
-
-        /**
          * The {@link KeyboardAccessoryData.Tab} passed into this function will be completely
          * removed from the tab layout.
          *
diff --git a/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupMediator.java b/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupMediator.java
index 7caace8a..bdd008c 100644
--- a/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupMediator.java
+++ b/chrome/browser/keyboard_accessory/android/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupMediator.java
@@ -88,11 +88,6 @@
     }
 
     @Override
-    public void addTab(KeyboardAccessoryData.Tab tab) {
-        mModel.get(TABS).add(tab);
-    }
-
-    @Override
     public void removeTab(KeyboardAccessoryData.Tab tab) {
         mModel.get(TABS).remove(tab);
     }
diff --git a/chrome/browser/net/cookie_encryption_provider_browsertest.cc b/chrome/browser/net/cookie_encryption_provider_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/net/cookie_encryption_provider_browsertest.cc
rename to chrome/browser/net/cookie_encryption_provider_interactive_uitest.cc
diff --git a/chrome/browser/os_crypt/app_bound_encryption_test_main.cc b/chrome/browser/os_crypt/app_bound_encryption_test_main.cc
index 35034e0f..6bdd38e 100644
--- a/chrome/browser/os_crypt/app_bound_encryption_test_main.cc
+++ b/chrome/browser/os_crypt/app_bound_encryption_test_main.cc
@@ -13,6 +13,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/win/scoped_com_initializer.h"
 #include "chrome/browser/os_crypt/app_bound_encryption_win.h"
 #include "chrome/browser/os_crypt/test_support.h"
diff --git a/chrome/browser/page_content_annotations/page_content_annotations_service_browsertest.cc b/chrome/browser/page_content_annotations/page_content_annotations_service_browsertest.cc
index 2d757fca..73070e9 100644
--- a/chrome/browser/page_content_annotations/page_content_annotations_service_browsertest.cc
+++ b/chrome/browser/page_content_annotations/page_content_annotations_service_browsertest.cc
@@ -821,9 +821,7 @@
  public:
   PageContentAnnotationsServiceSalientImageMetadataBrowserTest() {
     scoped_feature_list_.InitWithFeaturesAndParameters(
-        {{features::kPageContentAnnotations, {}},
-         {features::kPageContentAnnotationsPersistSalientImageMetadata,
-          {{"supported_countries", "*"}, {"supported_locales", "*"}}}},
+        {{features::kPageContentAnnotations, {}}},
         /*disabled_features=*/{});
     set_load_model_on_startup(false);
   }
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc
index 35e958a..23e980211 100644
--- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc
+++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc
@@ -18,7 +18,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile.h"
@@ -34,9 +33,7 @@
 #include "components/page_load_metrics/browser/observers/ad_metrics/ad_intervention_browser_test_utils.h"
 #include "components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h"
 #include "components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
 #include "components/page_load_metrics/browser/page_load_metrics_test_waiter.h"
-#include "components/performance_manager/public/v8_memory/v8_detailed_memory.h"
 #include "components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h"
 #include "components/subresource_filter/content/shared/browser/ruleset_service.h"
 #include "components/subresource_filter/core/browser/subresource_filter_features.h"
@@ -109,12 +106,6 @@
 const char kHeavyAdInterventionTypeHistogramId[] =
     "PageLoad.Clients.Ads.HeavyAds.InterventionType2";
 
-const char kMemoryMainFrameMaxHistogramId[] =
-    "PageLoad.Clients.Ads.Memory.MainFrame.Max";
-
-const char kMemoryUpdateCountHistogramId[] =
-    "PageLoad.Clients.Ads.Memory.UpdateCount";
-
 }  // namespace
 
 class AdsPageLoadMetricsObserverBrowserTest
@@ -139,8 +130,7 @@
 
   void SetUp() override {
     std::vector<base::test::FeatureRef> enabled = {
-        subresource_filter::kAdTagging,
-        page_load_metrics::features::kV8PerFrameMemoryMonitoring};
+        subresource_filter::kAdTagging};
     std::vector<base::test::FeatureRef> disabled = {};
 
     scoped_feature_list_.InitWithFeatures(enabled, disabled);
@@ -3116,113 +3106,6 @@
       "PageLoad.Clients.Ads.FrameCounts.AdFrames.Total", 0);
 }
 
-class AdsMemoryMeasurementBrowserTest
-    : public subresource_filter::SubresourceFilterBrowserTest {
- public:
-  AdsMemoryMeasurementBrowserTest() = default;
-
-  AdsMemoryMeasurementBrowserTest(const AdsMemoryMeasurementBrowserTest&) =
-      delete;
-  AdsMemoryMeasurementBrowserTest& operator=(
-      const AdsMemoryMeasurementBrowserTest&) = delete;
-
-  ~AdsMemoryMeasurementBrowserTest() override = default;
-
-  void SetUp() override {
-    performance_manager::v8_memory::internal::
-        SetEagerMemoryMeasurementEnabledForTesting(true);
-    std::vector<base::test::FeatureRef> enabled = {
-        subresource_filter::kAdTagging,
-        page_load_metrics::features::kV8PerFrameMemoryMonitoring};
-    std::vector<base::test::FeatureRef> disabled = {};
-    scoped_feature_list_.InitWithFeatures(enabled, disabled);
-
-    subresource_filter::SubresourceFilterBrowserTest::SetUp();
-  }
-
-  std::unique_ptr<page_load_metrics::PageLoadMetricsTestWaiter>
-  CreatePageLoadMetricsTestWaiter() {
-    content::WebContents* web_contents =
-        browser()->tab_strip_model()->GetActiveWebContents();
-    return std::make_unique<page_load_metrics::PageLoadMetricsTestWaiter>(
-        web_contents);
-  }
-
-  std::unordered_set<content::GlobalRenderFrameHostId,
-                     content::GlobalRenderFrameHostIdHasher>
-  GetFrameRoutingIds() {
-    content::WebContents* web_contents =
-        browser()->tab_strip_model()->GetActiveWebContents();
-    std::unordered_set<content::GlobalRenderFrameHostId,
-                       content::GlobalRenderFrameHostIdHasher>
-        frame_routing_ids;
-
-    web_contents->GetPrimaryMainFrame()->ForEachRenderFrameHost(
-        [&frame_routing_ids](content::RenderFrameHost* frame) {
-          frame_routing_ids.insert(frame->GetGlobalId());
-        });
-
-    return frame_routing_ids;
-  }
-
- private:
-  std::unique_ptr<page_load_metrics::PageLoadMetricsTestWaiter> waiter_;
-  base::test::ScopedFeatureList scoped_feature_list_;
-};
-
-IN_PROC_BROWSER_TEST_F(AdsMemoryMeasurementBrowserTest,
-                       SingleAdFrame_MaxMemoryBytesRecorded) {
-  base::HistogramTester histogram_tester;
-
-  // Instantiate a memory request and observer to set memory measurement
-  // polling parameters. PageLoadMetricsMemoryTracker will get results as soon
-  // as they're available for this request, which is able to use
-  // kEagerForTesting mode.
-  using performance_manager::v8_memory::V8DetailedMemoryRequest;
-  auto memory_request = std::make_unique<V8DetailedMemoryRequest>(
-      base::Seconds(1),
-      V8DetailedMemoryRequest::MeasurementMode::kEagerForTesting);
-  memory_request->StartMeasurement();
-
-  // cross_site_iframe_factory loads URLs like:
-  // http://b.com:40919/cross_site_iframe_factory.html?b()
-  SetRulesetWithRules({subresource_filter::testing::CreateSuffixRule("b()")});
-  const GURL main_url(embedded_test_server()->GetURL(
-      "a.com", "/cross_site_iframe_factory.html?a(b)"));
-
-  // Create a waiter, navigate to the main URL, and prime the waiter with the
-  // mainframe's routing ID.
-  auto waiter = CreatePageLoadMetricsTestWaiter();
-
-  // Navigate to the main URL.
-  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), main_url));
-
-  waiter->AddMemoryUpdateExpectation(browser()
-                                         ->tab_strip_model()
-                                         ->GetActiveWebContents()
-                                         ->GetPrimaryMainFrame()
-                                         ->GetGlobalId());
-
-  // Add any additional frame routing IDs and wait until we get positive
-  // memory measurements for each frame.
-  for (content::GlobalRenderFrameHostId id : GetFrameRoutingIds()) {
-    waiter->AddMemoryUpdateExpectation(id);
-  }
-  waiter->Wait();
-
-  // Navigate away to force the histogram recording.
-  ASSERT_TRUE(
-      ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)));
-
-  histogram_tester.ExpectTotalCount(kMemoryMainFrameMaxHistogramId, 1);
-  EXPECT_GT(
-      histogram_tester.GetAllSamples(kMemoryMainFrameMaxHistogramId)[0].min, 0);
-
-  histogram_tester.ExpectTotalCount(kMemoryUpdateCountHistogramId, 1);
-  EXPECT_GE(
-      histogram_tester.GetAllSamples(kMemoryUpdateCountHistogramId)[0].min, 1);
-}
-
 class AdsPageLoadMetricsObserverPrerenderingBrowserTest
     : public AdsPageLoadMetricsObserverBrowserTest {
  public:
@@ -3397,6 +3280,7 @@
     {"promise_resolve", "Promise.resolve().then($1);"},
     {"promise_reject", "Promise.reject().catch($1);"},
     {"queueMicrotask", "queueMicrotask($1);"},
+    {"postTask", "scheduler.postTask($1);"},
     {"dynamic_script_tag", R"SCRIPT(
       const s = document.createElement("script");
       s.innerText = '$1();';
diff --git a/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc
index 5eec560..29a9bdc 100644
--- a/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc
+++ b/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc
@@ -434,17 +434,6 @@
   EXPECT_EQ(rfh_a->GetLifecycleState(),
             content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
-  auto samples = histogram_tester().GetAllSamples(
-      internal::
-          kHistogramCumulativeShiftScoreMainFrameAfterBackForwardCacheRestore);
-  EXPECT_EQ(1ul, samples.size());
-  EXPECT_EQ(base::Bucket(page_load_metrics::LayoutShiftUmaValue(next_score), 1),
-            samples[0]);
-
-  histogram_tester().ExpectTotalCount(
-      internal::
-          kHistogramCumulativeShiftScoreMainFrameAfterBackForwardCacheRestore,
-      1);
   histogram_tester().ExpectTotalCount(
       internal::kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore, 1);
 
@@ -457,8 +446,6 @@
   // As back-foward cache is used twice (once for A and once for B), the current
   // total count is 2.
   histogram_tester().ExpectBucketCount(
-      "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame", 0, 2);
-  histogram_tester().ExpectBucketCount(
       "PageLoad.LayoutInstability.CumulativeShiftScore", 0, 2);
 
   // Go back to A again.
@@ -474,10 +461,6 @@
             content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
   histogram_tester().ExpectTotalCount(
-      internal::
-          kHistogramCumulativeShiftScoreMainFrameAfterBackForwardCacheRestore,
-      2);
-  histogram_tester().ExpectTotalCount(
       internal::kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore, 2);
 
   ExpectMetricCountForUrl(
@@ -485,8 +468,6 @@
 
   // As back-foward cache is used fourth in total.
   histogram_tester().ExpectBucketCount(
-      "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame", 0, 4);
-  histogram_tester().ExpectBucketCount(
       "PageLoad.LayoutInstability.CumulativeShiftScore", 0, 4);
 }
 
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
index 82c74bc9..5f174a1e 100644
--- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
@@ -764,7 +764,7 @@
     builder
         .SetPaintTimingBeforeSoftNavigation_NavigationToLargestContentfulPaint2(
             largest_contentful_paint.Time().value().InMilliseconds());
-        PAGE_LOAD_HISTOGRAM("PageLoad.BeforeSoftNavigation.LargestContentfulPaint2",
+    PAGE_LOAD_HISTOGRAM("PageLoad.BeforeSoftNavigation.LargestContentfulPaint2",
                         largest_contentful_paint.Time().value());
   }
   builder.Record(ukm::UkmRecorder::Get());
@@ -1363,11 +1363,6 @@
                            GetDelegate()
                                .GetPageRenderData()
                                .layout_shift_score_before_input_or_scroll));
-
-  base::UmaHistogramCounts100(
-      "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame",
-      page_load_metrics::LayoutShiftUmaValue(
-          GetDelegate().GetMainFrameRenderData().layout_shift_score));
 }
 
 void UkmPageLoadMetricsObserver::ReportLayoutInstabilityAfterFirstForeground() {
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc
index 32e7d51..3695f8c 100644
--- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc
@@ -2181,11 +2181,6 @@
                   "PageLoad.LayoutInstability.CumulativeShiftScore"),
               testing::ElementsAre(base::Bucket(25, 1)));
 
-  // Main-frame (DCLS) score includes only the LS scores in the main frame.
-  EXPECT_THAT(tester()->histogram_tester().GetAllSamples(
-                  "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame"),
-              testing::ElementsAre(base::Bucket(10, 1)));
-
   const auto& ukm_recorder = tester()->test_ukm_recorder();
   std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries =
       ukm_recorder.GetMergedEntriesByName(PageLoad::kEntryName);
diff --git a/chrome/browser/page_load_metrics/observers/loading_predictor_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/loading_predictor_page_load_metrics_observer.h
index 247c94b..03abbc1 100644
--- a/chrome/browser/page_load_metrics/observers/loading_predictor_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/loading_predictor_page_load_metrics_observer.h
@@ -67,7 +67,6 @@
       const page_load_metrics::mojom::PageLoadTiming& timing) override;
   void OnFirstMeaningfulPaintInMainFrameDocument(
       const page_load_metrics::mojom::PageLoadTiming& timing) override;
-
  private:
   raw_ptr<predictors::ResourcePrefetchPredictor> predictor_;
   raw_ptr<predictors::LoadingPredictorTabHelper> predictor_tab_helper_;
diff --git a/chrome/browser/page_load_metrics/observers/security_state_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/security_state_page_load_metrics_observer.cc
index 0320c8e5c..73a91ac5 100644
--- a/chrome/browser/page_load_metrics/observers/security_state_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/security_state_page_load_metrics_observer.cc
@@ -75,7 +75,7 @@
 
 SecurityStatePageLoadMetricsObserver::SecurityStatePageLoadMetricsObserver(
     site_engagement::SiteEngagementService* engagement_service)
-    : content::WebContentsObserver(), engagement_service_(engagement_service) {}
+    : engagement_service_(engagement_service) {}
 
 SecurityStatePageLoadMetricsObserver::~SecurityStatePageLoadMetricsObserver() =
     default;
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
index 06c33bc..88fc195a 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
+++ b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
@@ -432,9 +432,6 @@
             kHistogramNavigationTimingNavigationStartToFirstLoaderCallback,
         expected_count);
     histogram_tester_->ExpectTotalCount(
-        internal::kHistogramNavigationTimingNavigationStartToFinalRequestStart,
-        expected_count);
-    histogram_tester_->ExpectTotalCount(
         internal::kHistogramNavigationTimingNavigationStartToFinalResponseStart,
         expected_count);
     histogram_tester_->ExpectTotalCount(
@@ -1035,10 +1032,6 @@
   histogram_tester_->ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
   histogram_tester_->ExpectTotalCount(internal::kHistogramLoad, 1);
   histogram_tester_->ExpectTotalCount(internal::kHistogramFirstPaint, 1);
-  histogram_tester_->ExpectTotalCount(
-      internal::kHistogramParseBlockedOnScriptLoad, 1);
-  histogram_tester_->ExpectTotalCount(
-      internal::kHistogramParseBlockedOnScriptExecution, 1);
 
   // Force navigation to another page, which should force logging of histograms
   // persisted at the end of the page load lifetime.
@@ -1070,10 +1063,6 @@
   histogram_tester_->ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
   histogram_tester_->ExpectTotalCount(internal::kHistogramLoad, 1);
   histogram_tester_->ExpectTotalCount(internal::kHistogramFirstPaint, 1);
-  histogram_tester_->ExpectTotalCount(
-      internal::kHistogramParseBlockedOnScriptLoad, 1);
-  histogram_tester_->ExpectTotalCount(
-      internal::kHistogramParseBlockedOnScriptExecution, 1);
 
   // Force navigation to another page, which should force logging of histograms
   // persisted at the end of the page load lifetime.
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc
index 1241cbf..dce86a7 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc
+++ b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc
@@ -44,7 +44,6 @@
 #include "chrome/browser/page_load_metrics/observers/third_party_cookie_deprecation_page_load_metrics_observer.h"
 #include "chrome/browser/page_load_metrics/observers/translate_page_load_metrics_observer.h"
 #include "chrome/browser/page_load_metrics/observers/webui_page_load_metrics_observer.h"
-#include "chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h"
 #include "chrome/browser/preloading/prefetch/no_state_prefetch/chrome_no_state_prefetch_contents_delegate.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search/search.h"
@@ -56,7 +55,6 @@
 #include "components/page_load_metrics/browser/observers/third_party_metrics_observer.h"
 #include "components/page_load_metrics/browser/observers/zstd_page_load_metrics_observer.h"
 #include "components/page_load_metrics/browser/page_load_metrics_embedder_base.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
 #include "components/page_load_metrics/browser/page_load_tracker.h"
 #include "components/page_load_metrics/google/browser/from_gws_abandoned_page_load_metrics_observer.h"
 #include "components/page_load_metrics/google/browser/gws_abandoned_page_load_metrics_observer.h"
@@ -134,10 +132,6 @@
   bool IsNonTabWebUI(const GURL& url) override;
   bool IsInternalWebUI(const GURL& url) override;
   bool ShouldObserveScheme(std::string_view scheme) override;
-  page_load_metrics::PageLoadMetricsMemoryTracker*
-  GetMemoryTrackerForBrowserContext(
-      content::BrowserContext* browser_context) override;
-
  protected:
   // page_load_metrics::PageLoadMetricsEmbedderBase:
   void RegisterObservers(page_load_metrics::PageLoadTracker* tracker,
@@ -357,18 +351,6 @@
         // BUILDFLAG(IS_CHROMEOS)
 }
 
-page_load_metrics::PageLoadMetricsMemoryTracker*
-PageLoadMetricsEmbedder::GetMemoryTrackerForBrowserContext(
-    content::BrowserContext* browser_context) {
-  if (!base::FeatureList::IsEnabled(
-          page_load_metrics::features::kV8PerFrameMemoryMonitoring)) {
-    return nullptr;
-  }
-
-  return page_load_metrics::PageLoadMetricsMemoryTrackerFactory::
-      GetForBrowserContext(browser_context);
-}
-
 }  // namespace
 
 void InitializePageLoadMetricsForWebContents(
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.cc b/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.cc
deleted file mode 100644
index 8603c1c..0000000
--- a/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h"
-
-#include "base/no_destructor.h"
-#include "components/page_load_metrics/browser/features.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
-
-namespace page_load_metrics {
-
-PageLoadMetricsMemoryTracker*
-PageLoadMetricsMemoryTrackerFactory::GetForBrowserContext(
-    content::BrowserContext* context) {
-  return static_cast<page_load_metrics::PageLoadMetricsMemoryTracker*>(
-      GetInstance()->GetServiceForBrowserContext(context, true));
-}
-
-PageLoadMetricsMemoryTrackerFactory*
-PageLoadMetricsMemoryTrackerFactory::GetInstance() {
-  static base::NoDestructor<PageLoadMetricsMemoryTrackerFactory> instance;
-  return instance.get();
-}
-
-PageLoadMetricsMemoryTrackerFactory::PageLoadMetricsMemoryTrackerFactory()
-    : ProfileKeyedServiceFactory(
-          "PageLoadMetricsMemoryTracker",
-          ProfileSelections::Builder()
-              .WithRegular(ProfileSelection::kOwnInstance)
-              // TODO(crbug.com/40257657): Check if this service is needed in
-              // Guest mode.
-              .WithGuest(ProfileSelection::kOwnInstance)
-              // TODO(crbug.com/41488885): Check if this service is needed for
-              // Ash Internals.
-              .WithAshInternals(ProfileSelection::kOwnInstance)
-              .Build()) {}
-
-bool PageLoadMetricsMemoryTrackerFactory::ServiceIsCreatedWithBrowserContext()
-    const {
-  return base::FeatureList::IsEnabled(features::kV8PerFrameMemoryMonitoring);
-}
-
-std::unique_ptr<KeyedService>
-PageLoadMetricsMemoryTrackerFactory::BuildServiceInstanceForBrowserContext(
-    content::BrowserContext* context) const {
-  return std::make_unique<page_load_metrics::PageLoadMetricsMemoryTracker>();
-}
-
-}  // namespace page_load_metrics
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h b/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h
deleted file mode 100644
index 98413bda..0000000
--- a/chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_PAGE_LOAD_METRICS_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_
-#define CHROME_BROWSER_PAGE_LOAD_METRICS_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_
-
-#include "chrome/browser/profiles/profile_keyed_service_factory.h"
-
-namespace page_load_metrics {
-
-class PageLoadMetricsMemoryTracker;
-
-class PageLoadMetricsMemoryTrackerFactory : public ProfileKeyedServiceFactory {
- public:
-  static PageLoadMetricsMemoryTracker* GetForBrowserContext(
-      content::BrowserContext* context);
-
-  static PageLoadMetricsMemoryTrackerFactory* GetInstance();
-
-  PageLoadMetricsMemoryTrackerFactory();
-
- private:
-  // BrowserContextKeyedServiceFactory:
-  bool ServiceIsCreatedWithBrowserContext() const override;
-
-  std::unique_ptr<KeyedService> BuildServiceInstanceForBrowserContext(
-      content::BrowserContext* context) const override;
-};
-
-}  // namespace page_load_metrics
-
-#endif  // CHROME_BROWSER_PAGE_LOAD_METRICS_PAGE_LOAD_METRICS_MEMORY_TRACKER_FACTORY_H_
diff --git a/chrome/browser/policy/test/autofill_ai_policy_browsertest.cc b/chrome/browser/policy/test/autofill_ai_policy_browsertest.cc
index 8ada3312..5249620 100644
--- a/chrome/browser/policy/test/autofill_ai_policy_browsertest.cc
+++ b/chrome/browser/policy/test/autofill_ai_policy_browsertest.cc
@@ -41,19 +41,36 @@
 static_assert(base::to_underlying(kAllowWithoutLogging) == 1);
 static_assert(base::to_underlying(kDisable) == 2);
 
+// This test has two parameters:
+//  * Policy value.
+//  * kYourSavedInfoSettingsPage feature flag value. When this flag is on, the
+//  `/autofill` page is replaced with the '/identityDocs' and '/travel' pages.
 class AutofillAiPolicyTest
     : public PolicyTest,
-      public testing::WithParamInterface<ModelExecutionEnterprisePolicyValue> {
+      public testing::WithParamInterface<
+          std::tuple<ModelExecutionEnterprisePolicyValue, bool>> {
  public:
   AutofillAiPolicyTest() {
-    scoped_feature_list_.InitWithFeatures(
-        {autofill::features::kAutofillAiWithDataSchema,
-         autofill::features::kAutofillAiIgnoreGeoIp},
-        {});
+    std::vector<base::test::FeatureRef> enabled_features{
+        autofill::features::kAutofillAiWithDataSchema,
+        autofill::features::kAutofillAiIgnoreGeoIp};
+    std::vector<base::test::FeatureRef> disabled_features;
+
+    if (is_your_saved_info_settings_page_enabled()) {
+      enabled_features.push_back(
+          autofill::features::kYourSavedInfoSettingsPage);
+    } else {
+      disabled_features.push_back(
+          autofill::features::kYourSavedInfoSettingsPage);
+    }
+    scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features);
   }
 
   ModelExecutionEnterprisePolicyValue policy_value() const {
-    return GetParam();
+    return std::get<0>(GetParam());
+  }
+  bool is_your_saved_info_settings_page_enabled() const {
+    return std::get<1>(GetParam());
   }
   bool disabled_by_policy() const { return policy_value() == kDisable; }
 
@@ -91,6 +108,14 @@
                 base::Unretained(this)));
   }
 
+  void VerifySettingsUrlIsReachable(std::string_view sub_page) {
+    ASSERT_TRUE(ui_test_utils::NavigateToURL(
+        browser(), GURL(base::StrCat({"chrome://settings/", sub_page}))));
+    EXPECT_TRUE(content::WaitForLoadStop(GetWebContents()));
+    EXPECT_EQ(GetWebContents()->GetURL().GetPath(),
+              base::StrCat({"/", sub_page}));
+  }
+
  private:
   void EnableSignin() {
     auto account_info =
@@ -118,21 +143,21 @@
   base::CallbackListSubscription create_services_subscription_;
 };
 
-INSTANTIATE_TEST_SUITE_P(,
-                         AutofillAiPolicyTest,
-                         testing::Values(kAllow,
-                                         kAllowWithoutLogging,
-                                         kDisable));
+INSTANTIATE_TEST_SUITE_P(
+    ,
+    AutofillAiPolicyTest,
+    testing::Combine(testing::Values(kAllow, kAllowWithoutLogging, kDisable),
+                     testing::Bool()));
 
 // Tests that the chrome://settings entry for Autofill AI is always reachable
 // even if the policy is disabled.
 IN_PROC_BROWSER_TEST_P(AutofillAiPolicyTest, SettingsNotDisabledByPolicy) {
-  ASSERT_TRUE(ui_test_utils::NavigateToURL(
-      browser(),
-      GURL(base::StrCat({"chrome://settings/", chrome::kAutofillAiSubPage}))));
-  EXPECT_TRUE(content::WaitForLoadStop(GetWebContents()));
-  EXPECT_EQ(GetWebContents()->GetURL().GetPath(),
-            base::StrCat({"/", chrome::kAutofillAiSubPage}));
+  if (is_your_saved_info_settings_page_enabled()) {
+    VerifySettingsUrlIsReachable(chrome::kIdentityDocsSubPage);
+    VerifySettingsUrlIsReachable(chrome::kTravelSubPage);
+  } else {
+    VerifySettingsUrlIsReachable(chrome::kAutofillAiSubPage);
+  }
 }
 
 }  // namespace
diff --git a/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc b/chrome/browser/preloading/prerender/prerender_omnibox_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc
rename to chrome/browser/preloading/prerender/prerender_omnibox_interactive_uitest.cc
diff --git a/chrome/browser/privacy_budget/privacy_budget_browsertest.cc b/chrome/browser/privacy_budget/privacy_budget_browsertest.cc
index 40ef3ab..08e12aeb 100644
--- a/chrome/browser/privacy_budget/privacy_budget_browsertest.cc
+++ b/chrome/browser/privacy_budget/privacy_budget_browsertest.cc
@@ -461,104 +461,6 @@
                                  Contains(Key(navigation_source_id_hash)))))));
 }
 
-IN_PROC_BROWSER_TEST_F(PrivacyBudgetBrowserTestWithTestRecorder,
-                       CallsCanvasToBlob) {
-  ASSERT_TRUE(embedded_test_server()->Start());
-
-  content::DOMMessageQueue messages(web_contents());
-  base::RunLoop run_loop;
-
-  // Add a callback checking when the canvas metric is reported.
-  recorder().SetOnAddEntryCallback(
-      ukm::builders::Identifiability::kEntryName,
-      base::BindLambdaForTesting([this, &run_loop]() {
-        // toBlob() is called on a context-less canvas, hence -1, which is the
-        // value of blink::CanvasRenderingContext::CanvasRenderingAPI::kUnknown.
-        constexpr uint64_t input_digest = -1;
-        const uint64_t canvas_key =
-            blink::IdentifiableSurface::FromTypeAndToken(
-                blink::IdentifiableSurface::Type::kCanvasReadback, input_digest)
-                .ToUkmMetricHash();
-
-        for (const ukm::mojom::UkmEntry* entry : recorder().GetEntriesByName(
-                 ukm::builders::Identifiability::kEntryName)) {
-          for (const auto& [key, value] : entry->metrics) {
-            if (key == canvas_key) {
-              run_loop.Quit();
-            }
-          }
-        }
-      }));
-
-  ASSERT_TRUE(content::NavigateToURL(
-      web_contents(), embedded_test_server()->GetURL(
-                          "/privacy_budget/calls_canvas_to_blob.html")));
-
-  // The document calls an instrumented method and sends a message
-  // back to the test. Receipt of the message indicates that the script
-  // successfully completed. However, we must also wait for the UKM metric to be
-  // recorded, which happens on a TaskRunner.
-  std::string blob_type;
-  ASSERT_TRUE(messages.WaitForMessage(&blob_type));
-
-  // Navigating away from the test page causes the document to be unloaded. That
-  // will cause any buffered metrics to be flushed.
-  content::NavigateToURLBlockUntilNavigationsComplete(web_contents(),
-                                                      GURL("about:blank"), 1);
-
-  // Wait for the metrics to come down the pipe.
-  run_loop.Run();
-}
-
-IN_PROC_BROWSER_TEST_F(PrivacyBudgetBrowserTestWithTestRecorder,
-                       CanvasToBlobDifferentDocument) {
-  ASSERT_TRUE(embedded_test_server()->Start());
-
-  content::DOMMessageQueue messages(web_contents());
-  base::RunLoop run_loop;
-
-  // Add a callback checking when the canvas metric is reported.
-  recorder().SetOnAddEntryCallback(
-      ukm::builders::Identifiability::kEntryName,
-      base::BindLambdaForTesting([this, &run_loop]() {
-        // Key of the entry metric to look for.
-        constexpr uint64_t input_digest = UINT64_C(10266206452287635496);
-        const uint64_t canvas_key =
-            blink::IdentifiableSurface::FromTypeAndToken(
-                blink::IdentifiableSurface::Type::kCanvasReadback,
-                input_digest >> blink::IdentifiableSurface::kTypeBits)
-                .ToUkmMetricHash();
-
-        for (const ukm::mojom::UkmEntry* entry : recorder().GetEntriesByName(
-                 ukm::builders::Identifiability::kEntryName)) {
-          for (const auto& [key, value] : entry->metrics) {
-            if (key == canvas_key) {
-              run_loop.Quit();
-            }
-          }
-        }
-      }));
-
-  ASSERT_TRUE(content::NavigateToURL(
-      web_contents(), embedded_test_server()->GetURL(
-                          "/privacy_budget/calls_canvas_to_blob_xdoc.html")));
-
-  // The document calls an instrumented method and sends a message
-  // back to the test. Receipt of the message indicates that the script
-  // successfully completed. However, we must also wait for the UKM metric to be
-  // recorded, which happens on a TaskRunner.
-  std::string message;
-  ASSERT_TRUE(messages.WaitForMessage(&message));
-
-  // Navigating away from the test page causes the document to be unloaded. That
-  // will cause any buffered metrics to be flushed.
-  content::NavigateToURLBlockUntilNavigationsComplete(web_contents(),
-                                                      GURL("about:blank"), 1);
-
-  // Wait for the metrics to come down the pipe.
-  run_loop.Run();
-}
-
 namespace {
 
 // Test class that allows to enable UKM recording.
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
index 1a095bab..761972cf 100644
--- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -135,7 +135,6 @@
 #include "chrome/browser/page_info/about_this_site_service_factory.h"
 #include "chrome/browser/page_info/merchant_trust_service_factory.h"
 #include "chrome/browser/page_load_metrics/observers/https_engagement_metrics/https_engagement_service_factory.h"
-#include "chrome/browser/page_load_metrics/page_load_metrics_memory_tracker_factory.h"
 #include "chrome/browser/passage_embeddings/passage_embedder_model_observer_factory.h"
 #include "chrome/browser/password_manager/account_password_store_factory.h"
 #include "chrome/browser/password_manager/factories/field_info_manager_factory.h"
@@ -1140,7 +1139,6 @@
   page_content_annotations::PageContentExtractionServiceFactory::GetInstance();
   page_content_annotations::PageContentScreenshotServiceFactory::GetInstance();
   page_image_service::ImageServiceFactory::EnsureFactoryBuilt();
-  page_load_metrics::PageLoadMetricsMemoryTrackerFactory::GetInstance();
 #if !BUILDFLAG(IS_ANDROID)
   PageColorsControllerFactory::GetInstance();
 #endif
diff --git a/chrome/browser/profiles/gaia_info_update_service_unittest.cc b/chrome/browser/profiles/gaia_info_update_service_unittest.cc
index 852dc9d5..20da6405 100644
--- a/chrome/browser/profiles/gaia_info_update_service_unittest.cc
+++ b/chrome/browser/profiles/gaia_info_update_service_unittest.cc
@@ -53,10 +53,10 @@
 #include "ui/gfx/image/image_unittest_util.h"
 
 #if BUILDFLAG(ENABLE_GLIC)
-#include "chrome/browser/background/startup_launch_manager.h"
 #include "chrome/browser/glic/glic_pref_names.h"
 #include "chrome/browser/glic/public/glic_enabling.h"
 #include "chrome/browser/glic/test_support/glic_test_environment.h"
+#include "chrome/browser/startup/startup_launch_manager.h"
 #endif
 
 using signin::constants::kNoHostedDomainFound;
diff --git a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayer.java b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayer.java
index 4e27063..18ed32f 100644
--- a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayer.java
+++ b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayer.java
@@ -99,10 +99,7 @@
 
     @Override
     public SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport,
-            RectF visibleViewport,
-            ResourceManager resourceManager,
-            float topOffset) {
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager) {
         ReadAloudMiniPlayerSceneLayerJni.get()
                 .updateReadAloudMiniPlayerLayer(
                         mNativePtr,
diff --git a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayerUnitTest.java b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayerUnitTest.java
index f7597d2..13a96e0 100644
--- a/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayerUnitTest.java
+++ b/chrome/browser/readaloud/android/java/src/org/chromium/chrome/browser/readaloud/ReadAloudMiniPlayerSceneLayerUnitTest.java
@@ -59,8 +59,7 @@
                 .getBottomControlsMinHeightOffset();
 
         mSceneLayer.setSize((int) VIEWPORT.width(), (int) layerHeight);
-        mSceneLayer.getUpdatedSceneOverlayTree(
-                VIEWPORT, VIEWPORT, /* resourceManager= */ null, /* topOffset= */ 20f);
+        mSceneLayer.getUpdatedSceneOverlayTree(VIEWPORT, VIEWPORT, /* resourceManager= */ null);
 
         verify(mSceneLayerJni)
                 .updateReadAloudMiniPlayerLayer(
@@ -82,8 +81,7 @@
     @Test
     public void testSetColor() {
         mSceneLayer.setColor(0xAABBCCFF);
-        mSceneLayer.getUpdatedSceneOverlayTree(
-                VIEWPORT, VIEWPORT, /* resourceManager= */ null, /* topOffset= */ 20f);
+        mSceneLayer.getUpdatedSceneOverlayTree(VIEWPORT, VIEWPORT, /* resourceManager= */ null);
 
         verify(mSceneLayerJni)
                 .updateReadAloudMiniPlayerLayer(
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn
index c44e637..6b377ec 100644
--- a/chrome/browser/resources/BUILD.gn
+++ b/chrome/browser/resources/BUILD.gn
@@ -130,6 +130,10 @@
     ]
   }
 
+  if (is_mac || is_win) {
+    public_deps += [ "updater:resources" ]
+  }
+
   if (!is_android && !is_chromeos) {
     public_deps += [
       "inline_login:resources",
diff --git a/chrome/browser/resources/commerce/product_specifications/app.ts b/chrome/browser/resources/commerce/product_specifications/app.ts
index 8ab7ff67..460e1331 100644
--- a/chrome/browser/resources/commerce/product_specifications/app.ts
+++ b/chrome/browser/resources/commerce/product_specifications/app.ts
@@ -10,8 +10,10 @@
 import './table.js';
 import './horizontal_carousel.js';
 import './comparison_table_list.js';
-import 'chrome://resources/cr_elements/cr_hidden_style.css.js';
+import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_feedback_buttons/cr_feedback_buttons.js';
+import 'chrome://resources/cr_elements/cr_hidden_style.css.js';
+import 'chrome://resources/cr_elements/cr_loading_gradient/cr_loading_gradient.js';
 import 'chrome://resources/cr_elements/cr_toast/cr_toast.js';
 import './shared_vars.css.js';
 
diff --git a/chrome/browser/resources/commerce/product_specifications/buying_options_section.ts b/chrome/browser/resources/commerce/product_specifications/buying_options_section.ts
index b20da50..2f7d7fd3 100644
--- a/chrome/browser/resources/commerce/product_specifications/buying_options_section.ts
+++ b/chrome/browser/resources/commerce/product_specifications/buying_options_section.ts
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 import 'chrome://resources/cr_elements/cr_icons.css.js';
+import 'chrome://resources/cr_elements/cr_icon/cr_icon.js';
+import 'chrome://resources/cr_elements/icons.html.js';
 
 import {OpenWindowProxyImpl} from 'chrome://resources/js/open_window_proxy.js';
 import {CrLitElement} from 'chrome://resources/lit/v3_0/lit.rollup.js';
diff --git a/chrome/browser/resources/commerce/product_specifications/comparison_table_list.ts b/chrome/browser/resources/commerce/product_specifications/comparison_table_list.ts
index 70de83ac..077e381 100644
--- a/chrome/browser/resources/commerce/product_specifications/comparison_table_list.ts
+++ b/chrome/browser/resources/commerce/product_specifications/comparison_table_list.ts
@@ -10,6 +10,7 @@
 import 'chrome://resources/cr_elements/cr_toast/cr_toast.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import './images/icons.html.js';
+import './comparison_table_list_item.js';
 
 import {ShowSetDisposition} from '//resources/cr_components/commerce/product_specifications.mojom-webui.js';
 import type {ProductSpecificationsBrowserProxy} from '//resources/cr_components/commerce/product_specifications_browser_proxy.js';
diff --git a/chrome/browser/resources/commerce/product_specifications/description_section.ts b/chrome/browser/resources/commerce/product_specifications/description_section.ts
index f26932a1..9894edee 100644
--- a/chrome/browser/resources/commerce/product_specifications/description_section.ts
+++ b/chrome/browser/resources/commerce/product_specifications/description_section.ts
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import './description_citation.js';
+import './empty_section.js';
 
 import {CrLitElement} from 'chrome://resources/lit/v3_0/lit.rollup.js';
 import type {PropertyValues} from 'chrome://resources/lit/v3_0/lit.rollup.js';
diff --git a/chrome/browser/resources/commerce/product_specifications/product_selection_menu.ts b/chrome/browser/resources/commerce/product_specifications/product_selection_menu.ts
index 80f1520..5f2e3d4 100644
--- a/chrome/browser/resources/commerce/product_specifications/product_selection_menu.ts
+++ b/chrome/browser/resources/commerce/product_specifications/product_selection_menu.ts
@@ -5,6 +5,7 @@
 import 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js';
 import 'chrome://resources/cr_elements/cr_collapse/cr_collapse.js';
 import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.js';
+import 'chrome://resources/cr_elements/cr_icon/cr_icon.js';
 import 'chrome://resources/cr_elements/cr_lazy_render/cr_lazy_render_lit.js';
 import 'chrome://resources/cr_elements/cr_url_list_item/cr_url_list_item.js';
 import 'chrome://resources/cr_elements/cr_shared_style.css.js';
diff --git a/chrome/browser/resources/contextual_tasks/top_toolbar.html.ts b/chrome/browser/resources/contextual_tasks/top_toolbar.html.ts
index 7d32ec18..3de8ada 100644
--- a/chrome/browser/resources/contextual_tasks/top_toolbar.html.ts
+++ b/chrome/browser/resources/contextual_tasks/top_toolbar.html.ts
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '//resources/cr_elements/cr_icon/cr_iconset.js';
-
 import {html} from '//resources/lit/v3_0/lit.rollup.js';
 
 import type {TopToolbarElement} from './top_toolbar.js';
diff --git a/chrome/browser/resources/contextual_tasks/top_toolbar.ts b/chrome/browser/resources/contextual_tasks/top_toolbar.ts
index 75b8a604..5692f79 100644
--- a/chrome/browser/resources/contextual_tasks/top_toolbar.ts
+++ b/chrome/browser/resources/contextual_tasks/top_toolbar.ts
@@ -2,8 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import '//resources/cr_elements/cr_icon/cr_icon.js';
+import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import '//resources/cr_elements/cr_action_menu/cr_action_menu.js';
 import '//resources/cr_elements/cr_lazy_render/cr_lazy_render_lit.js';
+import '//resources/cr_elements/icons.html.js';
 
 import type {CrActionMenuElement} from 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js';
 import type {CrLazyRenderLitElement} from 'chrome://resources/cr_elements/cr_lazy_render/cr_lazy_render_lit.js';
diff --git a/chrome/browser/resources/lens/overlay/lens_overlay_app.ts b/chrome/browser/resources/lens/overlay/lens_overlay_app.ts
index 360a0da..0f89e859 100644
--- a/chrome/browser/resources/lens/overlay/lens_overlay_app.ts
+++ b/chrome/browser/resources/lens/overlay/lens_overlay_app.ts
@@ -8,9 +8,11 @@
 import './translate_button.js';
 import '/lens/shared/searchbox_ghost_loader.js';
 import '/lens/shared/searchbox_shared_style.css.js';
-import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
-import '//resources/cr_elements/icons.html.js';
 import '//resources/cr_components/searchbox/searchbox.js';
+import '//resources/cr_elements/cr_button/cr_button.js';
+import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
+import '//resources/cr_elements/cr_toast/cr_toast.js';
+import '//resources/cr_elements/icons.html.js';
 
 import {HelpBubbleMixin} from '//resources/cr_components/help_bubble/help_bubble_mixin.js';
 import type {SearchboxElement} from '//resources/cr_components/searchbox/searchbox.js';
diff --git a/chrome/browser/resources/lens/overlay/selection_overlay.ts b/chrome/browser/resources/lens/overlay/selection_overlay.ts
index 9ac5a9c..26c96d6 100644
--- a/chrome/browser/resources/lens/overlay/selection_overlay.ts
+++ b/chrome/browser/resources/lens/overlay/selection_overlay.ts
@@ -11,6 +11,7 @@
 import './overlay_shimmer_canvas.js';
 import '/strings.m.js';
 import '//resources/cr_elements/cr_button/cr_button.js';
+import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import '//resources/cr_elements/cr_toast/cr_toast.js';
 
 import type {CrIconButtonElement} from '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
diff --git a/chrome/browser/resources/lens/overlay/side_panel/side_panel_app.ts b/chrome/browser/resources/lens/overlay/side_panel/side_panel_app.ts
index f28401a4..a37b676 100644
--- a/chrome/browser/resources/lens/overlay/side_panel/side_panel_app.ts
+++ b/chrome/browser/resources/lens/overlay/side_panel/side_panel_app.ts
@@ -8,10 +8,12 @@
 import '/strings.m.js';
 import '/lens/shared/searchbox_ghost_loader.js';
 import '/lens/shared/searchbox_shared_style.css.js';
+import '//resources/cr_components/composebox/composebox.js';
 import '//resources/cr_components/searchbox/searchbox.js';
+import '//resources/cr_elements/cr_button/cr_button.js';
+import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import '//resources/cr_elements/cr_icons.css.js';
 import '//resources/cr_elements/cr_toast/cr_toast.js';
-import '//resources/cr_components/composebox/composebox.js';
 
 import {ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js';
 import type {ComposeboxElement} from '//resources/cr_components/composebox/composebox.js';
diff --git a/chrome/browser/resources/omnibox_popup/aim_app.css b/chrome/browser/resources/omnibox_popup/aim_app.css
index b1b4eac..bf8e91a0 100644
--- a/chrome/browser/resources/omnibox_popup/aim_app.css
+++ b/chrome/browser/resources/omnibox_popup/aim_app.css
@@ -52,12 +52,16 @@
   --color-composebox-upload-button-disabled: var(--color-omnibox-composebox-foreground-disabled);
   --cr-composebox-outline-hcm: none;
   --cr-composebox-submit-button-margin-inline-start: auto;
-  --cr-composebox-suggestion-activity-bottom: 10px;
+  --cr-composebox-suggestion-activity-bottom: 0;
   --cr-composebox-suggestion-activity-margin-top: 0;
 
   position: relative;
 }
 
+cr-composebox[searchbox-layout-mode="Compact"] {
+  --input-bottom-spacing: 14px;
+}
+
 cr-composebox[searchbox-layout-mode="Compact"]::part(context-menu-entrypoint-icon) {
   --cr-icon-button-size: 28px;
   left: 12px;
diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.ts b/chrome/browser/resources/settings/settings_menu/settings_menu.ts
index 844e9fc..636568f 100644
--- a/chrome/browser/resources/settings/settings_menu/settings_menu.ts
+++ b/chrome/browser/resources/settings/settings_menu/settings_menu.ts
@@ -40,6 +40,7 @@
     autofill: HTMLLinkElement,
     menu: CrMenuSelector,
     people: HTMLLinkElement,
+    yourSavedInfo: HTMLLinkElement,
   };
 }
 
diff --git a/chrome/browser/resources/side_panel/bookmarks/commerce/shopping_list.ts b/chrome/browser/resources/side_panel/bookmarks/commerce/shopping_list.ts
index c2d3141..ab746f67 100644
--- a/chrome/browser/resources/side_panel/bookmarks/commerce/shopping_list.ts
+++ b/chrome/browser/resources/side_panel/bookmarks/commerce/shopping_list.ts
@@ -2,11 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
-import 'chrome://resources/cr_elements/cr_shared_vars.css.js';
-import 'chrome://resources/cr_elements/mwb_element_shared_style.css.js';
 import 'chrome://resources/cr_elements/cr_auto_img/cr_auto_img.js';
+import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
+import 'chrome://resources/cr_elements/cr_icon/cr_icon.js';
+import 'chrome://resources/cr_elements/cr_shared_vars.css.js';
 import 'chrome://resources/cr_elements/cr_toast/cr_toast.js';
+import 'chrome://resources/cr_elements/mwb_element_shared_style.css.js';
 import './icons.html.js';
 
 import type {PriceTrackingBrowserProxy} from '//resources/cr_components/commerce/price_tracking_browser_proxy.js';
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmark_row.ts b/chrome/browser/resources/side_panel/bookmarks/power_bookmark_row.ts
index 56a3c7b0..10dd369b 100644
--- a/chrome/browser/resources/side_panel/bookmarks/power_bookmark_row.ts
+++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmark_row.ts
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import '//bookmarks-side-panel.top-chrome/shared/sp_list_item_badge.js';
 import 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js';
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.js';
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts
index 03c244c..b2b1b99c 100644
--- a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts
+++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts
@@ -3,7 +3,10 @@
 // found in the LICENSE file.
 
 import '/strings.m.js';
+import '//bookmarks-side-panel.top-chrome/shared/sp_heading.js';
+import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
+import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_input/cr_input.js';
 import 'chrome://resources/cr_elements/cr_shared_style.css.js';
 import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts
index e85533469..40bc59b1 100644
--- a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts
+++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts
@@ -19,6 +19,7 @@
 import '//resources/cr_elements/cr_action_menu/cr_action_menu.js';
 import '//resources/cr_elements/cr_button/cr_button.js';
 import '//resources/cr_elements/cr_dialog/cr_dialog.js';
+import '//resources/cr_elements/cr_icon/cr_icon.js';
 import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import '//resources/cr_elements/cr_lazy_render/cr_lazy_render.js';
 import '//resources/cr_elements/cr_toast/cr_toast.js';
diff --git a/chrome/browser/resources/side_panel/customize_chrome/app.ts b/chrome/browser/resources/side_panel/customize_chrome/app.ts
index d0d4289..e0dba83 100644
--- a/chrome/browser/resources/side_panel/customize_chrome/app.ts
+++ b/chrome/browser/resources/side_panel/customize_chrome/app.ts
@@ -4,6 +4,7 @@
 
 import 'chrome://customize-chrome-side-panel.top-chrome/shared/sp_heading.js';
 import 'chrome://resources/cr_components/help_bubble/new_badge.js';
+import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_chip/cr_chip.js';
 import 'chrome://resources/cr_elements/cr_icon/cr_icon.js';
 import 'chrome://resources/cr_elements/cr_page_selector/cr_page_selector.js';
diff --git a/chrome/browser/resources/side_panel/customize_chrome/customize_toolbar/toolbar.ts b/chrome/browser/resources/side_panel/customize_chrome/customize_toolbar/toolbar.ts
index f586c5d..175fd92 100644
--- a/chrome/browser/resources/side_panel/customize_chrome/customize_toolbar/toolbar.ts
+++ b/chrome/browser/resources/side_panel/customize_chrome/customize_toolbar/toolbar.ts
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://customize-chrome-side-panel.top-chrome/shared/sp_heading.js';
+import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
 
 import type {SpHeadingElement} from 'chrome://customize-chrome-side-panel.top-chrome/shared/sp_heading.js';
diff --git a/chrome/browser/resources/side_panel/read_anything/menus/simple_action_menu.ts b/chrome/browser/resources/side_panel/read_anything/menus/simple_action_menu.ts
index b511f24..7ef721ea 100644
--- a/chrome/browser/resources/side_panel/read_anything/menus/simple_action_menu.ts
+++ b/chrome/browser/resources/side_panel/read_anything/menus/simple_action_menu.ts
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import '//resources/cr_elements/cr_action_menu/cr_action_menu.js';
+import '//resources/cr_elements/cr_icon/cr_icon.js';
 import '//resources/cr_elements/cr_lazy_render/cr_lazy_render_lit.js';
 
 import type {CrActionMenuElement} from '//resources/cr_elements/cr_action_menu/cr_action_menu.js';
diff --git a/chrome/browser/resources/side_panel/read_anything/read_aloud/read_aloud_types.ts b/chrome/browser/resources/side_panel/read_anything/read_aloud/read_aloud_types.ts
index d5b990c..b42d6297 100644
--- a/chrome/browser/resources/side_panel/read_anything/read_aloud/read_aloud_types.ts
+++ b/chrome/browser/resources/side_panel/read_anything/read_aloud/read_aloud_types.ts
@@ -96,6 +96,7 @@
 // Represents a node used by read aloud that's based entirely on the DOM.
 export class DomReadAloudNode extends ReadAloudNode {
   nearestBlockAncestor: Node|undefined = undefined;
+  private isSuperscript_?: boolean;
 
   protected constructor(protected node: Node) {
     super();
@@ -126,6 +127,28 @@
     this.nearestBlockAncestor = this.getNearestBlockAncestor_();
   }
 
+  // Returns true if the DOM node associated with this ReadAloudNode is
+  // part of a superscript (i.e., inside a <sup> tag).
+  isSuperscript(): boolean {
+    // Don't recalculate whether this node is a superscript if we've already
+    // checked.
+    if (this.isSuperscript_ !== undefined) {
+      return this.isSuperscript_;
+    }
+
+    const domNode = this.node;
+    if (!domNode) {
+      this.isSuperscript_ = false;  // Cache the result
+      return false;
+    }
+    const element = domNode.nodeType === Node.ELEMENT_NODE ?
+        domNode as Element :
+        domNode.parentElement;
+
+    this.isSuperscript_ = !!element?.closest('sup');
+    return this.isSuperscript_;
+  }
+
   // The nearest ancestor to the DOM node associated with this ReadAloudNode
   // that is of a "block" style such that it would constitute a line break.
   getBlockAncestor(): Node|undefined {
diff --git a/chrome/browser/resources/side_panel/read_anything/read_aloud/ts_model_impl.ts b/chrome/browser/resources/side_panel/read_anything/read_aloud/ts_model_impl.ts
index a95c756..e0fce64 100644
--- a/chrome/browser/resources/side_panel/read_anything/read_aloud/ts_model_impl.ts
+++ b/chrome/browser/resources/side_panel/read_anything/read_aloud/ts_model_impl.ts
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import {assert} from '//resources/js/assert.js';
+
 import type {ReadAloudModelBrowserProxy} from './read_aloud_model_browser_proxy.js';
 import type {OffsetByNode, Segment, SegmentedSentence, Sentence} from './read_aloud_types.js';
 import {DomReadAloudNode, ReadAloudNode} from './read_aloud_types.js';
@@ -102,7 +104,8 @@
 
     // Now map the list of sentences to an array of an array of text segments.
     // Each list of segments represents a sentence that should be spoken.
-    this.sentences_ = this.mapSentencesToSegments_(sentences, nodeOffsets);
+    this.sentences_ =
+        this.processSentencesAndMapSegments_(sentences, nodeOffsets, fullText);
 
     this.initialized_ = true;
     if (this.sentences_.length > 0) {
@@ -110,11 +113,6 @@
     }
   }
 
-  resetModel() {
-    this.resetState_();
-  }
-
-
   onNodeWillBeDeleted(deletedNode: Node) {
     if (!this.isInitialized()) {
       return;
@@ -176,7 +174,10 @@
       if (!textNode) {
         continue;
       }
-      nodeOffsets.push({node: textNode, startOffset: fullText.length});
+      nodeOffsets.push({
+        node: textNode,
+        startOffset: fullText.length,
+      });
       fullText += textNode.getText();
 
       // If there's a node after this one, check to see if there should be
@@ -205,27 +206,173 @@
     return false;
   }
 
-  // Maps sentence boundaries from the concatenated text back to their
+  // Process sentences with semantic node information to better segment the
+  // text. Then map sentence boundaries from the concatenated text back to their
   // original DOM nodes.
   // Returns a list of sentences, where each sentence is a list of segments.
-  private mapSentencesToSegments_(
-      sentences: Sentence[], nodeOffsets: OffsetByNode[]): SegmentedSentence[] {
+  private processSentencesAndMapSegments_(
+      sentences: Sentence[], nodeOffsets: OffsetByNode[],
+      fullText: string): SegmentedSentence[] {
     const sentenceSegments: SegmentedSentence[] = [];
     let nodeIndex = 0;
+
+    // Buffer for the previous sentence being built, potentially including
+    // superscripts from the next sentence.
+    let previousSentence: Sentence|null = null;
+
     for (const sentence of sentences) {
-      const {segments, nextNodeIndex} =
-          this.createSegmentsForSentence_(sentence, nodeOffsets, nodeIndex);
-      nodeIndex = nextNodeIndex;
+      let currentSentence: Sentence|null = sentence;
+
+      // Merge any superscripts that should be merged with the previous
+      // sentence.
+      if (previousSentence) {
+        currentSentence = this.maybeMergeSuperscripts_(
+            currentSentence, nodeOffsets, fullText, previousSentence);
+      }
+
+      // Add the completed sentence to the segments array
+      if (previousSentence) {
+        // Create segments for the completed sentence in the buffer
+        const {segments, nextNodeIndex} = this.createSegmentsForSentence_(
+            previousSentence, nodeOffsets, nodeIndex);
+
+        if (segments.length > 0) {
+          sentenceSegments.push({
+            sentenceInfo: previousSentence,
+            segments: segments,
+          });
+        }
+        nodeIndex = nextNodeIndex;
+      }
+
+      // Set the buffer to the current (potentially remaining) sentence
+      if (currentSentence) {
+        previousSentence = currentSentence;
+      }
+    }
+
+    if (previousSentence) {
+      const {segments} = this.createSegmentsForSentence_(
+          previousSentence, nodeOffsets, nodeIndex);
+
       if (segments.length > 0) {
         sentenceSegments.push({
-          sentenceInfo: sentence,
+          sentenceInfo: previousSentence,
           segments: segments,
         });
       }
     }
+
     return sentenceSegments;
   }
 
+  // Intl.Segmenter tends to group superscripts, particularly citations, with
+  // the succeeding sentence instead of the sentence. e.g.
+  // This is a fact.^[1] And this is another fact.
+  // is segmented as "This is a fact." and "[1] And this is another fact."
+  // Instead, during postprocessing with the semantic node information, regroup
+  // the superscripts with the preceding sentence.
+  // currentSentence represents the current sentence that contains superscripts
+  // and previousSentence represents the sentence that any superscripts in
+  // currentSentence should be merged back into.
+  // Returns null if the entire currentSentence was a superscript and merged
+  // into previousSentence. If not, returns the remaining part of
+  // currentSentence that wasn't merged.
+  private moveSuperscriptsToPrecedingSentence_(
+      nodes: OffsetByNode[], fullText: string, currentSentence: Sentence|null,
+      previousSentence: Sentence): Sentence|null {
+    assert(nodes.length > 0, 'attempting to merge superscript with no nodes');
+    const superscriptNode = nodes[0]!;
+    const superscriptText = superscriptNode.node.getText().trim();
+
+    const superscriptStartIndex: number =
+        currentSentence!.text.indexOf(superscriptText);
+    if (superscriptStartIndex === -1 ||
+        currentSentence!.text.substring(0, superscriptStartIndex).trim() !==
+            '') {
+      // This isn't a sentence that starts with a superscript, or there's
+      // text before the superscript.
+      return currentSentence;
+    }
+
+    // The sentence starts with a superscript. Merge it with the previous
+    // sentence.
+    const superscriptEndIndex = superscriptStartIndex + superscriptText.length;
+
+    // Update sentence buffer to contain the superscript.
+    const endOfSuperscriptInSentenceIndex =
+        currentSentence!.index + superscriptEndIndex;
+    previousSentence.text = fullText.substring(
+        previousSentence.index, endOfSuperscriptInSentenceIndex);
+
+    const remainder = currentSentence!.text.substring(superscriptEndIndex);
+
+    if (remainder.trim().length > 0) {
+      return {
+        text: remainder,
+        index: currentSentence!.index + superscriptEndIndex,
+      };
+    }
+
+    return null;
+  }
+
+  // Returns the list of DomReadAloudNodes associated with the provided.
+  private findNodesForSentence_(
+      sentence: Sentence, nodeOffsets: OffsetByNode[]): OffsetByNode[] {
+    const sentenceStart = sentence.index;
+    const sentenceEnd = sentence.index + sentence.text.length;
+    const nodes: OffsetByNode[] = [];
+    for (const offsetByNode of nodeOffsets) {
+      const nodeLength = offsetByNode.node.getText().length;
+      const nodeEndOffset = offsetByNode.startOffset + nodeLength;
+      if (offsetByNode.startOffset >= sentenceEnd) {
+        break;
+      }
+      if (nodeEndOffset <= sentenceStart) {
+        continue;
+      }
+      nodes.push(offsetByNode);
+    }
+    return nodes;
+  }
+
+  resetModel() {
+    this.resetState_();
+  }
+
+
+  // Helper method to handle superscript merging
+  private maybeMergeSuperscripts_(
+      currentSentence: Sentence, nodeOffsets: OffsetByNode[], fullText: string,
+      previousSentence: Sentence): Sentence|null {
+    let finalSentence: Sentence|null = currentSentence;
+
+    while (finalSentence) {
+      const nodes = this.findNodesForSentence_(finalSentence, nodeOffsets);
+      // If there are no nodes in the current sentence or the first node
+      // is not a superscript, no need to continue with postprocessing.
+      if (nodes.length === 0 || !nodes[0]!.node.isSuperscript()) {
+        break;
+      }
+
+      const nextSentence = this.moveSuperscriptsToPrecedingSentence_(
+          nodes, fullText, finalSentence, previousSentence);
+
+      // If the sentence returned is the same as the current working sentence,
+      // the superscripts were unable to be grouped.
+      if (nextSentence === finalSentence) {
+        break;
+      }
+
+      // A merge occurred. The next sentence is either the remainder or null.
+      finalSentence = nextSentence;
+    }
+
+    // Returns the unmerged part of the sentence or null
+    return finalSentence;
+  }
+
   // Creates a list of segments for a given sentence.
   private createSegmentsForSentence_(
       sentence: Sentence,
diff --git a/chrome/browser/resources/support_tool/data_collectors.html b/chrome/browser/resources/support_tool/data_collectors.html
index 1ce6fa1..fc336cc 100644
--- a/chrome/browser/resources/support_tool/data_collectors.html
+++ b/chrome/browser/resources/support_tool/data_collectors.html
@@ -24,5 +24,5 @@
 </div>
 
 <template is="dom-if" if="[[enableScreenshot_]]" restamp>
-  <screenshot-element id="screenshot"></screenshot-element>
+  <support-tool-screenshot id="screenshot"></support-tool-screenshot>
 </template>
diff --git a/chrome/browser/resources/support_tool/screenshot.ts b/chrome/browser/resources/support_tool/screenshot.ts
index 506c2fb..e403efd 100644
--- a/chrome/browser/resources/support_tool/screenshot.ts
+++ b/chrome/browser/resources/support_tool/screenshot.ts
@@ -20,7 +20,7 @@
 
 export class ScreenshotElement extends ScreenshotElementBase {
   static get is() {
-    return 'screenshot-element';
+    return 'support-tool-screenshot';
   }
 
   static get template() {
@@ -233,7 +233,7 @@
 
 declare global {
   interface HTMLElementTagNameMap {
-    'screenshot-element': ScreenshotElement;
+    'support-tool-screenshot': ScreenshotElement;
   }
 }
 
diff --git a/chrome/browser/resources/updater/BUILD.gn b/chrome/browser/resources/updater/BUILD.gn
new file mode 100644
index 0000000..afbb6a94
--- /dev/null
+++ b/chrome/browser/resources/updater/BUILD.gn
@@ -0,0 +1,26 @@
+# Copyright 2025 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//ui/webui/resources/tools/build_webui.gni")
+
+assert(is_mac || is_win)
+
+build_webui("build") {
+  grd_prefix = "updater"
+
+  static_files = [ "updater.html" ]
+
+  ts_files = [
+    "app.html.ts",
+    "app.ts",
+  ]
+  css_files = [ "app.css" ]
+
+  webui_context_type = "trusted"
+
+  ts_deps = [
+    "//third_party/lit/v3_0:build_ts",
+    "//ui/webui/resources/cr_elements:build_ts",
+  ]
+}
diff --git a/chrome/browser/resources/updater/DIR_METADATA b/chrome/browser/resources/updater/DIR_METADATA
new file mode 100644
index 0000000..086971c
--- /dev/null
+++ b/chrome/browser/resources/updater/DIR_METADATA
@@ -0,0 +1 @@
+mixins: "//chrome/updater/COMMON_METADATA"
\ No newline at end of file
diff --git a/chrome/browser/resources/updater/OWNERS b/chrome/browser/resources/updater/OWNERS
new file mode 100644
index 0000000..0133be3e
--- /dev/null
+++ b/chrome/browser/resources/updater/OWNERS
@@ -0,0 +1 @@
+file://chrome/updater/OWNERS
\ No newline at end of file
diff --git a/chrome/browser/resources/updater/app.css b/chrome/browser/resources/updater/app.css
new file mode 100644
index 0000000..0331f7d
--- /dev/null
+++ b/chrome/browser/resources/updater/app.css
@@ -0,0 +1,13 @@
+/* Copyright 2025 The Chromium Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file. */
+
+/* #css_wrapper_metadata_start
+ * #type=style-lit
+ * #import=//resources/cr_elements/cr_shared_vars.css.js
+ * #scheme=relative
+ * #css_wrapper_metadata_end */
+
+html {
+  background-color: white;
+}
diff --git a/chrome/browser/resources/updater/app.html.ts b/chrome/browser/resources/updater/app.html.ts
new file mode 100644
index 0000000..fb40064
--- /dev/null
+++ b/chrome/browser/resources/updater/app.html.ts
@@ -0,0 +1,11 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {html} from '//resources/lit/v3_0/lit.rollup.js';
+
+import type {UpdaterAppElement} from './app.js';
+
+export function getHtml(this: UpdaterAppElement) {
+  return html``;
+}
diff --git a/chrome/browser/resources/updater/app.ts b/chrome/browser/resources/updater/app.ts
new file mode 100644
index 0000000..f5a08774
--- /dev/null
+++ b/chrome/browser/resources/updater/app.ts
@@ -0,0 +1,30 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {CrLitElement} from '//resources/lit/v3_0/lit.rollup.js';
+
+import {getCss} from './app.css.js';
+import {getHtml} from './app.html.js';
+
+export class UpdaterAppElement extends CrLitElement {
+  static get is() {
+    return 'updater-app';
+  }
+
+  static override get styles() {
+    return getCss();
+  }
+
+  override render() {
+    return getHtml.bind(this)();
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'updater-app': UpdaterAppElement;
+  }
+}
+
+customElements.define(UpdaterAppElement.is, UpdaterAppElement);
diff --git a/chrome/browser/resources/updater/updater.html b/chrome/browser/resources/updater/updater.html
new file mode 100644
index 0000000..882fa071
--- /dev/null
+++ b/chrome/browser/resources/updater/updater.html
@@ -0,0 +1,11 @@
+<!DOCTYPE HTML>
+<html>
+  <head>
+    <title>Updater</title>
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <updater-app></updater-app>
+    <script type="module" src="app.js"></script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/chrome/browser/resources/webui_browser/app.html.ts b/chrome/browser/resources/webui_browser/app.html.ts
index b43c020..27743b6 100644
--- a/chrome/browser/resources/webui_browser/app.html.ts
+++ b/chrome/browser/resources/webui_browser/app.html.ts
@@ -13,12 +13,12 @@
   <div id="topContainer">
     <div class="titlebarDiv" @mousedown="${this.onTabDragMouseDown_}">
       <div class="tabstripDiv" style="margin-left:${this.tabStripInset_}px">
-        <webui-browser-tabstrip id="tabstrip"
+        <webui-browser-tab-strip id="tabstrip"
           @tab-click="${this.onTabClick_}"
           @tab-drag-out-of-bounds="${this.onTabDragOutOfBounds_}"
           @tab-close="${this.onTabClosed_}"
           @tab-add="${this.onAddTabClick_}">
-        </webui-browser-tabstrip>
+        </webui-browser-tab-strip>
       </div>
       <if expr="not is_macosx">
         <div class="captionButtonsDiv">
diff --git a/chrome/browser/resources/webui_browser/app.ts b/chrome/browser/resources/webui_browser/app.ts
index 00c9028..afbd51f 100644
--- a/chrome/browser/resources/webui_browser/app.ts
+++ b/chrome/browser/resources/webui_browser/app.ts
@@ -11,6 +11,9 @@
 import './tab_strip.js';
 import './webview.js';
 import 'chrome://resources/cr_components/searchbox/searchbox.js';
+import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
+import 'chrome://resources/cr_elements/cr_icon/cr_icon.js';
 
 import {ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js';
 import {assert} from '//resources/js/assert.js';
diff --git a/chrome/browser/resources/webui_browser/bookmark_element.ts b/chrome/browser/resources/webui_browser/bookmark_element.ts
index 6ca51aa..bedc9a91 100644
--- a/chrome/browser/resources/webui_browser/bookmark_element.ts
+++ b/chrome/browser/resources/webui_browser/bookmark_element.ts
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import './icons.html.js';
+import '//resources/cr_elements/cr_icon/cr_icon.js';
 
 import {getFaviconForPageURL} from '//resources/js/icon.js';
 import {CrLitElement, type PropertyValues} from '//resources/lit/v3_0/lit.rollup.js';
diff --git a/chrome/browser/resources/webui_browser/extension_element.ts b/chrome/browser/resources/webui_browser/extension_element.ts
index 70f7c9a1..17180909 100644
--- a/chrome/browser/resources/webui_browser/extension_element.ts
+++ b/chrome/browser/resources/webui_browser/extension_element.ts
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import './icons.html.js';
+import '//resources/cr_elements/cr_button/cr_button.js';
 
 import {CrLitElement, type PropertyValues} from '//resources/lit/v3_0/lit.rollup.js';
 import {MenuSourceType} from '//resources/mojo/ui/base/mojom/menu_source_type.mojom-webui.js';
diff --git a/chrome/browser/resources/webui_browser/side_panel.ts b/chrome/browser/resources/webui_browser/side_panel.ts
index 05be51c..fefe247 100644
--- a/chrome/browser/resources/webui_browser/side_panel.ts
+++ b/chrome/browser/resources/webui_browser/side_panel.ts
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
+
 import {CrLitElement} from '//resources/lit/v3_0/lit.rollup.js';
 
 import {BrowserProxy} from './browser_proxy.js';
diff --git a/chrome/browser/resources/webui_browser/tab_element.ts b/chrome/browser/resources/webui_browser/tab_element.ts
index 9197fdb7..01859264 100644
--- a/chrome/browser/resources/webui_browser/tab_element.ts
+++ b/chrome/browser/resources/webui_browser/tab_element.ts
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
+
 import type {PropertyValues} from '//resources/lit/v3_0/lit.rollup.js';
 import {CrLitElement} from '//resources/lit/v3_0/lit.rollup.js';
 import type {Tab as TabData} from '/tab_strip_api/tab_strip_api_data_model.mojom-webui.js';
@@ -89,7 +91,7 @@
 
 declare global {
   interface HTMLElementTagNameMap {
-    'webui-browser-tabstrip': TabStrip;
+    'webui-browser-tab-strip': TabStrip;
     'webui-browser-tab': TabElement;
   }
 }
diff --git a/chrome/browser/resources/webui_browser/tab_strip.ts b/chrome/browser/resources/webui_browser/tab_strip.ts
index 3d4e341..94efd80 100644
--- a/chrome/browser/resources/webui_browser/tab_strip.ts
+++ b/chrome/browser/resources/webui_browser/tab_strip.ts
@@ -24,7 +24,7 @@
 
 export class TabStrip extends CrLitElement {
   static get is() {
-    return 'webui-browser-tabstrip';
+    return 'webui-browser-tab-strip';
   }
 
   static override get styles() {
diff --git a/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc b/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc
index 0614b76..384baf1 100644
--- a/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc
+++ b/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/barrier_callback.h"
+#include "base/barrier_closure.h"
 #include "base/compiler_specific.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
@@ -1335,8 +1336,12 @@
   ClientSideDetectionHostCreditCardFormTest() {
     scoped_feature_list_.InitAndEnableFeatureWithParameters(
         kClientSideDetectionCreditCardForm,
-        {{kCsdCreditCardFormHCAcceptanceRate.name, "0.0"},
-         {kCsdCreditCardFormSampleRate.name, "1.0"}});
+        {
+            {kCsdCreditCardFormPingOnDetection.name, "true"},
+            {kCsdCreditCardFormPingOnInteraction.name, "true"},
+            {kCsdCreditCardFormHCAcceptanceRate.name, "0.0"},
+            {kCsdCreditCardFormSampleRate.name, "1.0"},
+        });
   }
 
   ClientSideDetectionHostCreditCardFormTest(
@@ -1412,26 +1417,23 @@
   histogram_tester.ExpectTotalCount(
       "SBClientPhishing.PreClassificationCheckResult.CreditCardForm", 0);
 
-  // Navigation will trigger preclassification on credit card form detection.
+  // Navigation trigger preclassification on credit card form detection.
+  // Form focus will trigger preclassification on credit card form interaction.
   base::RunLoop run_loop;
+  base::RepeatingClosure barrier =
+      base::BarrierClosure(2, run_loop.QuitClosure());
   csd_host->set_preclassification_done_callback_for_testing(
       base::BindLambdaForTesting([&](ClientSideDetectionType detection_type) {
         if (detection_type == ClientSideDetectionType::CREDIT_CARD_FORM) {
-          run_loop.Quit();
+          barrier.Run();
         }
       }));
   NavigateToCreditCardForm();
+  FocusOnCreditCardNumberField();
   run_loop.Run();
 
   histogram_tester.ExpectTotalCount(
-      "SBClientPhishing.PreClassificationCheckResult.CreditCardForm", 1);
-
-  // Interaction with the form will trigger preclassification that exits early
-  // because of URL deduplication.
-  FocusOnCreditCardNumberField();
-
-  histogram_tester.ExpectTotalCount(
-      "SBClientPhishing.PreClassificationCheckResult.CreditCardForm", 1);
+      "SBClientPhishing.PreClassificationCheckResult.CreditCardForm", 2);
 }
 
 IN_PROC_BROWSER_TEST_F(ClientSideDetectionHostCreditCardFormTest,
@@ -1473,7 +1475,6 @@
   csd_host->set_preclassification_started_callback_for_testing(
       base::BarrierCallback<ClientSideDetectionType>(2, future.GetCallback()));
   GURL url = NavigateToCreditCardForm();
-  FocusOnCreditCardNumberField();
   EXPECT_THAT(future.Take(),
               testing::Contains(ClientSideDetectionType::CREDIT_CARD_FORM));
 
diff --git a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
index c8f1468..734c624d 100644
--- a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
+++ b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
@@ -2241,8 +2241,9 @@
   auto form_data = autofill::test::CreateTestEmailOrLoyaltyCardFormData();
   autofill_manager()->OnFormsSeen({form_data}, {});
 
-  // Preclassification should not have been triggered by OnFormsSeen.
   EXPECT_FALSE(future.IsReady());
+
+  // The event was not even logged (before pre-classification).
   histogram_tester_.ExpectTotalCount(
       "SBClientPhishing.CreditCardFormEvent.OnFieldTypesDetermined", 0);
 }
@@ -2271,8 +2272,9 @@
   autofill_manager()->OnFocusOnFormField(
       form_data, form_data.fields().begin()->global_id());
 
-  // Preclassification should not have been triggered by OnFocusOnFormField.
   EXPECT_FALSE(future.IsReady());
+
+  // The event was not even logged (before pre-classification).
   histogram_tester_.ExpectTotalCount(
       "SBClientPhishing.CreditCardFormEvent.OnBeforeFocusOnFormField", 0);
 }
@@ -2301,8 +2303,9 @@
       /*is_https=*/true, /*use_month_type=*/true);
   autofill_manager()->OnFormsSeen({form_data}, {});
 
-  // Preclassification should not have been triggered by OnFormsSeen.
   EXPECT_FALSE(future.IsReady());
+
+  // The event was not even logged (before pre-classification).
   histogram_tester_.ExpectTotalCount(
       "SBClientPhishing.CreditCardFormEvent.OnFieldTypesDetermined", 0);
 }
@@ -2333,8 +2336,9 @@
   autofill_manager()->OnFocusOnFormField(
       form_data, form_data.fields().begin()->global_id());
 
-  // Preclassification should not have been triggered by OnFormsSeen.
   EXPECT_FALSE(future.IsReady());
+
+  // The event was not even logged (before pre-classification).
   histogram_tester_.ExpectTotalCount(
       "SBClientPhishing.CreditCardFormEvent.OnBeforeFocusOnFormField", 0);
 }
@@ -2345,9 +2349,11 @@
     GTEST_SKIP();
   }
 
-  // Feature enabled, 100% HC allowlist acceptance, 0% sample rate
-  // (default params):
-  feature_list_.InitAndEnableFeature(kClientSideDetectionCreditCardForm);
+  // Feature enabled, detection pings enabled, 100% HC allowlist acceptance:
+  feature_list_.InitAndEnableFeatureWithParameters(
+      kClientSideDetectionCreditCardForm,
+      {{kCsdCreditCardFormPingOnDetection.name, "true"},
+       {kCsdCreditCardFormHCAcceptanceRate.name, "1.0"}});
   SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true);
 
   GURL url("http://host.com/");
@@ -2396,9 +2402,11 @@
     GTEST_SKIP();
   }
 
-  // Feature enabled, 100% HC allowlist acceptance, 0% sample rate
-  // (default params):
-  feature_list_.InitAndEnableFeature(kClientSideDetectionCreditCardForm);
+  // Feature enabled, interaction pings enabled, 100% HC allowlist acceptance:
+  feature_list_.InitAndEnableFeatureWithParameters(
+      kClientSideDetectionCreditCardForm,
+      {{kCsdCreditCardFormPingOnInteraction.name, "true"},
+       {kCsdCreditCardFormHCAcceptanceRate.name, "1.0"}});
   SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true);
 
   GURL url("http://host.com/");
@@ -2447,10 +2455,12 @@
     GTEST_SKIP();
   }
 
-  // Feature enabled, 0% HC allowlist acceptance, 0% sample rate:
+  // Feature enabled, detection pings enabled, 100% HC allowlist acceptance,
+  // 0% sample rate:
   feature_list_.InitAndEnableFeatureWithParameters(
       kClientSideDetectionCreditCardForm,
-      {{kCsdCreditCardFormHCAcceptanceRate.name, "0.0"},
+      {{kCsdCreditCardFormPingOnDetection.name, "true"},
+       {kCsdCreditCardFormHCAcceptanceRate.name, "0.0"},
        {kCsdCreditCardFormSampleRate.name, "0.0"}});
   SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true);
 
@@ -2500,10 +2510,12 @@
     GTEST_SKIP();
   }
 
-  // Feature enabled, 0% HC allowlist acceptance, 0% sample rate:
+  // Feature enabled, interaction pings enabled, 100% HC allowlist acceptance,
+  // 0% sample rate:
   feature_list_.InitAndEnableFeatureWithParameters(
       kClientSideDetectionCreditCardForm,
-      {{kCsdCreditCardFormHCAcceptanceRate.name, "0.0"},
+      {{kCsdCreditCardFormPingOnInteraction.name, "true"},
+       {kCsdCreditCardFormHCAcceptanceRate.name, "0.0"},
        {kCsdCreditCardFormSampleRate.name, "0.0"}});
   SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true);
 
@@ -2555,10 +2567,12 @@
     GTEST_SKIP();
   }
 
-  // Feature enabled, 100% sample rate, max site engagement = 1 (new visit)
+  // Feature enabled, detection pings enabled, 100% sample rate,
+  // max site engagement = 1 (new visit):
   feature_list_.InitAndEnableFeatureWithParameters(
       kClientSideDetectionCreditCardForm,
       {
+          {kCsdCreditCardFormPingOnDetection.name, "true"},
           {kCsdCreditCardFormSampleRate.name, "1.0"},
           {kCsdCreditCardFormMaxUserVisit.name, "1"},
       });
@@ -2603,10 +2617,12 @@
     GTEST_SKIP();
   }
 
-  // Feature enabled, 100% sample rate, max site engagement = 2 visits
+  // Feature enabled, interaction pings enabled, 100% sample rate,
+  // max site engagement = 1 (new visit):
   feature_list_.InitAndEnableFeatureWithParameters(
       kClientSideDetectionCreditCardForm,
       {
+          {kCsdCreditCardFormPingOnInteraction.name, "true"},
           {kCsdCreditCardFormSampleRate.name, "1.0"},
           {kCsdCreditCardFormMaxUserVisit.name, "1"},
       });
@@ -2653,10 +2669,12 @@
     GTEST_SKIP();
   }
 
-  // Feature enabled, 100% sample rate, max site engagement = 2 visits
+  // Feature enabled, detection pings enabled, 100% sample rate,
+  // max site engagement = 2 visits
   feature_list_.InitAndEnableFeatureWithParameters(
       kClientSideDetectionCreditCardForm,
       {
+          {kCsdCreditCardFormPingOnDetection.name, "true"},
           {kCsdCreditCardFormSampleRate.name, "1.0"},
           {kCsdCreditCardFormMaxUserVisit.name, "2"},
       });
@@ -2705,12 +2723,15 @@
     GTEST_SKIP();
   }
 
-  // Feature enabled, 100% sample rate, max site engagement = 2 visits
+  // Feature enabled, interaction pings enabled, 100% sample rate,
+  // max site engagement = 2 visits
   feature_list_.InitAndEnableFeatureWithParameters(
       kClientSideDetectionCreditCardForm,
       {
+          {kCsdCreditCardFormPingOnDetection.name, "true"},
+          {kCsdCreditCardFormPingOnInteraction.name, "true"},
           {kCsdCreditCardFormSampleRate.name, "1.0"},
-          {kCsdCreditCardFormMaxUserVisit.name, "1"},
+          {kCsdCreditCardFormMaxUserVisit.name, "2"},
       });
   SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true);
 
@@ -2734,32 +2755,32 @@
   histogram_tester_.ExpectTotalCount(
       "SBClientPhishing.HistoryServiceDuration.GetVisibleVisitCountToHost", 0);
 
-  ExpectPreClassificationChecks(url, &kFalse, &kFalse, nullptr, nullptr,
-                                nullptr);
   auto form_data = autofill::test::CreateTestCreditCardFormData(
       /*is_https=*/true, /*use_month_type=*/true);
+  ExpectPreClassificationChecks(url, &kFalse, &kFalse, nullptr, nullptr,
+                                nullptr);
   autofill_manager()->OnFormsSeen({form_data}, {});
   WaitUntilHighConfidenceAllowlistCheckDone();
   WaitAndCheckPreClassificationChecks();
 
-  TestFuture<ClientSideDetectionType> future;
-  csd_host_->set_preclassification_started_callback_for_testing(
-      future.GetRepeatingCallback());
+  ExpectPreClassificationChecks(url, &kFalse, &kFalse, nullptr, nullptr,
+                                nullptr);
   autofill_manager()->OnFocusOnFormField(
       form_data, form_data.fields().begin()->global_id());
-  EXPECT_FALSE(future.IsReady());
+  WaitUntilHighConfidenceAllowlistCheckDone();
+  WaitAndCheckPreClassificationChecks();
 
   // Pre-classification should have proceeded to classification
-  // on the first event (detection).
+  // for both events.
   ExpectOnlyBucketCount(
       "SBClientPhishing.CreditCardFormEvent.OnFieldTypesDetermined",
       credit_card_form::kNewSiteVisitNoReferringAppAutofillLocalHeuristic, 1);
   ExpectOnlyBucketCount(
       "SBClientPhishing.CreditCardFormEvent.OnBeforeFocusOnFormField",
-      credit_card_form::kNewSiteVisitNoReferringAppAutofillServerHeuristic, 0);
+      credit_card_form::kNewSiteVisitNoReferringAppAutofillServerHeuristic, 1);
   ExpectOnlyBucketCount(
       "SBClientPhishing.PreClassificationCheckResult.CreditCardForm",
-      PreClassificationCheckResult::CLASSIFY, 1);
+      PreClassificationCheckResult::CLASSIFY, 2);
 
   // Note also that HistoryService was not called a second time either.
   histogram_tester_.ExpectTotalCount(
@@ -2772,10 +2793,13 @@
     GTEST_SKIP();
   }
 
-  // Feature enabled, 100% sample rate:
+  // Feature enabled, detection pings enabled, 100% sample rate:
   feature_list_.InitAndEnableFeatureWithParameters(
       kClientSideDetectionCreditCardForm,
-      {{kCsdCreditCardFormSampleRate.name, "1.0"}});
+      {
+          {kCsdCreditCardFormPingOnDetection.name, "true"},
+          {kCsdCreditCardFormSampleRate.name, "1.0"},
+      });
   SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true);
 
   GURL url("http://host.com/");
@@ -2827,10 +2851,13 @@
     GTEST_SKIP();
   }
 
-  // Feature enabled, 100% sample rate:
+  // Feature enabled, interaction pings enabled, 100% sample rate:
   feature_list_.InitAndEnableFeatureWithParameters(
       kClientSideDetectionCreditCardForm,
-      {{kCsdCreditCardFormSampleRate.name, "1.0"}});
+      {
+          {kCsdCreditCardFormPingOnInteraction.name, "true"},
+          {kCsdCreditCardFormSampleRate.name, "1.0"},
+      });
   SetEnhancedProtectionPrefForTests(profile()->GetPrefs(), true);
 
   GURL url("http://host.com/");
diff --git a/chrome/browser/select_popup_browsertest.cc b/chrome/browser/select_popup_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/select_popup_browsertest.cc
rename to chrome/browser/select_popup_interactive_uitest.cc
diff --git a/chrome/browser/shell_integration_win.cc b/chrome/browser/shell_integration_win.cc
index ad6f61f..71fb966 100644
--- a/chrome/browser/shell_integration_win.cc
+++ b/chrome/browser/shell_integration_win.cc
@@ -48,6 +48,7 @@
 #include "chrome/browser/shell_integration.h"
 #include "chrome/browser/shortcuts/platform_util_win.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
+#include "chrome/browser/win/registry_watcher.h"
 #include "chrome/browser/win/settings_app_monitor.h"
 #include "chrome/browser/win/util_win_service.h"
 #include "chrome/common/chrome_constants.h"
@@ -339,13 +340,13 @@
                            base::OnceClosure on_finished_callback)
       : on_finished_callback_(std::move(on_finished_callback)) {
     for (const wchar_t* const* scan = &schemes[0]; *scan != nullptr; ++scan) {
-      AddRegistryKeyWatcher(base::StrCat({L"SOFTWARE\\Microsoft\\Windows\\Shell"
-                                          L"\\Associations\\UrlAssociations\\",
-                                          *scan, L"\\UserChoice"})
-                                .c_str());
+      AddRegistryWatcher(base::StrCat({L"SOFTWARE\\Microsoft\\Windows\\Shell"
+                                       L"\\Associations\\UrlAssociations\\",
+                                       *scan, L"\\UserChoice"})
+                             .c_str());
     }
-    // Only the watchers that were succesfully initialized are counted.
-    registry_watcher_count_ = registry_key_watchers_.size();
+    // Only the watchers that were successfully initialized are counted.
+    registry_watcher_count_ = registry_watchers_.size();
 
     timer_.Start(FROM_HERE, base::Minutes(2),
                  base::BindOnce(&OpenSystemSettingsHelper::ConcludeInteraction,
@@ -386,16 +387,23 @@
 
   // Helper function to create a registry watcher for a given |key_path|. Do
   // nothing on initialization failure.
-  void AddRegistryKeyWatcher(const wchar_t* key_path) {
+  void AddRegistryWatcher(const wchar_t* key_path) {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
     auto reg_key = std::make_unique<base::win::RegKey>(HKEY_CURRENT_USER,
                                                        key_path, KEY_NOTIFY);
 
-    if (reg_key->Valid() && reg_key->StartWatching(base::BindOnce(
-                                &OpenSystemSettingsHelper::OnRegistryKeyChanged,
-                                weak_ptr_factory_.GetWeakPtr()))) {
-      registry_key_watchers_.push_back(std::move(reg_key));
+    if (reg_key->Valid()) {
+      std::vector<std::wstring> key_paths = {key_path};
+      auto registry_watcher = std::make_unique<RegistryWatcher>(
+          key_paths,
+          base::BindOnce(&OpenSystemSettingsHelper::OnRegistryKeyChanged,
+                         weak_ptr_factory_.GetWeakPtr()));
+
+      // Verify that the watcher is watching at least one registry key.
+      if (registry_watcher->GetRegistryKeyCount() >= 1u) {
+        registry_watchers_.push_back(std::move(registry_watcher));
+      }
     }
   }
 
@@ -412,7 +420,7 @@
   // There can be multiple registry key watchers as some settings modify
   // multiple scheme associations. e.g. Changing the default browser modifies
   // the http and https associations.
-  std::vector<std::unique_ptr<base::win::RegKey>> registry_key_watchers_;
+  std::vector<std::unique_ptr<RegistryWatcher>> registry_watchers_;
 
   base::OneShotTimer timer_;
 
diff --git a/chrome/browser/signin/dice_web_signin_interceptor.cc b/chrome/browser/signin/dice_web_signin_interceptor.cc
index 1e56a00..904cb9a 100644
--- a/chrome/browser/signin/dice_web_signin_interceptor.cc
+++ b/chrome/browser/signin/dice_web_signin_interceptor.cc
@@ -80,6 +80,7 @@
 #include "components/signin/public/base/signin_metrics.h"
 #include "components/signin/public/base/signin_pref_names.h"
 #include "components/signin/public/base/signin_prefs.h"
+#include "components/signin/public/base/signin_switches.h"
 #include "components/signin/public/identity_manager/account_capabilities.h"
 #include "components/signin/public/identity_manager/account_info.h"
 #include "components/signin/public/identity_manager/account_managed_status_finder.h"
@@ -105,11 +106,20 @@
 // The user will only see the Chrome Signin bubble reprompt a maximum of 4 times
 // (not including the initial time the bubble was declined).
 static constexpr int kMaxChromeSigninBubbleRepromptCountAllowed = 4;
+// Same as for kMaxChromeSigninBubbleRepromptCountAllowed, with different value
+// to be used in SigninPromoLimitsExperiment.
+static constexpr int
+    kMaxChromeSigninBubbleRepromptCountAllowedForLimitsExperiment = 10;
 // The Chrome Signin bubble can be reprompted only if a minimum duration time
 // has passed since the last bubble was shown (either initial bubble or a
 // reprompt).
 static constexpr base::TimeDelta kMinimumDurationForChromeSigninBubbleReprompt =
     base::Days(60);
+// Same as for kMinimumDurationForChromeSigninBubbleReprompt, with different
+// value to be used in SigninPromoLimitsExperiment.
+static constexpr base::TimeDelta
+    kMinimumDurationForChromeSigninBubbleRepromptForLimitsExperiment =
+        base::Days(7);
 
 // Helper function to return the primary account info. The returned info is
 // empty if there is no primary account, and non-empty otherwise. Extended
@@ -188,7 +198,11 @@
 
   // Maximum reprompt count check.
   int reprompt_count = signin_prefs.GetChromeSigninBubbleRepromptCount(gaia_id);
-  if (reprompt_count >= kMaxChromeSigninBubbleRepromptCountAllowed) {
+  int max_reprompt_count =
+      base::FeatureList::IsEnabled(switches::kSigninPromoLimitsExperiment)
+          ? kMaxChromeSigninBubbleRepromptCountAllowedForLimitsExperiment
+          : kMaxChromeSigninBubbleRepromptCountAllowed;
+  if (reprompt_count >= max_reprompt_count) {
     return false;
   }
 
@@ -198,8 +212,11 @@
       GetTimeSinceLastChromeSigninDecline(signin_prefs, gaia_id);
 
   // Minimum duration since last chrome signin decline check.
-  return time_since_last_decline >=
-         kMinimumDurationForChromeSigninBubbleReprompt;
+  const base::TimeDelta minimum_duration =
+      base::FeatureList::IsEnabled(switches::kSigninPromoLimitsExperiment)
+          ? kMinimumDurationForChromeSigninBubbleRepromptForLimitsExperiment
+          : kMinimumDurationForChromeSigninBubbleReprompt;
+  return time_since_last_decline >= minimum_duration;
 }
 
 // Set showing the bubble as a reprompt if the user previously declined the
@@ -227,7 +244,6 @@
       gaia_id, base::Time::Now());
   int new_reprompt_count =
       signin_prefs.IncrementChromeSigninBubbleRepromptCount(gaia_id);
-
   base::UmaHistogramExactLinear("Signin.Intercept.ChromeSignin.RepromptCount",
                                 new_reprompt_count,
                                 kMaxChromeSigninBubbleRepromptCountAllowed + 1);
diff --git a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc
index 6c0610f..4fcfb10 100644
--- a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc
+++ b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc
@@ -1293,6 +1293,66 @@
       ChromeSigninUserChoice::kSignin);
 }
 
+class DiceWebSigninInterceptorUnoBubbleLimitsExperimentBrowserTest
+    : public DiceWebSigninInterceptorWithExplicitSigninEnabledBrowserTest {
+ private:
+  base::test::ScopedFeatureList feature_list_{
+      switches::kSigninPromoLimitsExperiment};
+};
+
+IN_PROC_BROWSER_TEST_F(
+    DiceWebSigninInterceptorUnoBubbleLimitsExperimentBrowserTest,
+    ChromeSigninInterceptDeclinesRepromptThenRepromptsAfter10Days) {
+  // Setup account for interception.
+  AccountInfo info = MakeAccountInfoAvailableAndUpdate("alice@example.com",
+                                                       kNoHostedDomainFound);
+  // Makes sure Chrome is not signed in to trigger the Chrome Signin intercept
+  // bubble.
+  ASSERT_FALSE(IsChromeSignedIn());
+
+  SigninPrefs signin_prefs(*GetProfile()->GetPrefs());
+  ASSERT_FALSE(
+      signin_prefs.GetChromeSigninInterceptionLastBubbleDeclineTime(info.gaia)
+          .has_value());
+  ASSERT_EQ(signin_prefs.GetChromeSigninBubbleRepromptCount(info.gaia), 0);
+
+  ShowAndCompleteSigninBubbleWithResult(info,
+                                        SigninInterceptionResult::kDeclined);
+  EXPECT_FALSE(IsChromeSignedIn());
+  // Decline time pref is set.
+  std::optional<base::Time> initial_decline_time =
+      signin_prefs.GetChromeSigninInterceptionLastBubbleDeclineTime(info.gaia);
+  ASSERT_TRUE(initial_decline_time.has_value());
+  // Reprompt count is 0.
+  EXPECT_EQ(signin_prefs.GetChromeSigninBubbleRepromptCount(info.gaia), 0);
+
+  // Immediate attempt to show the bubble should not succeed, since not enough
+  // time has passed.
+  ExpectAttemptToShowChromeSigninBubbleNotToShow(info);
+
+  SimulateChromeSigninDeclinedAdvanceTime(info.gaia, base::Days(6));
+
+  // Attempt before the minimum duration for reprompt has passed, it should
+  // fail.
+  ExpectAttemptToShowChromeSigninBubbleNotToShow(info);
+
+  SimulateChromeSigninDeclinedAdvanceTime(info.gaia, base::Days(4));
+
+  // Bubble should show as we are in the first period where the bubble can be
+  // reprompted. Decline it to proceed with the reprompts.
+  ASSERT_GT(time_since_last_reprompt(info.gaia), base::Days(10));
+  ShowAndCompleteSigninBubbleWithResult(info,
+                                        SigninInterceptionResult::kDeclined);
+  // Last bubble time pref is still set.
+  std::optional<base::Time> updated_last_decline_time =
+      signin_prefs.GetChromeSigninInterceptionLastBubbleDeclineTime(info.gaia);
+  ASSERT_TRUE(updated_last_decline_time.has_value());
+  // And different from the initial decline time.
+  EXPECT_LT(initial_decline_time.value(), updated_last_decline_time.value());
+  // Reprompt count updated
+  EXPECT_EQ(signin_prefs.GetChromeSigninBubbleRepromptCount(info.gaia), 1);
+}
+
 // This test mainly checks the combination of dismissal and the effect it has on
 // the user choice. Simulating multiple accounts and checks that they do not
 // affect each other:
diff --git a/chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc b/chrome/browser/site_isolation/site_per_process_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc
rename to chrome/browser/site_isolation/site_per_process_interactive_uitest.cc
diff --git a/chrome/browser/site_isolation/site_per_process_text_input_browsertest.cc b/chrome/browser/site_isolation/site_per_process_text_input_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/site_isolation/site_per_process_text_input_browsertest.cc
rename to chrome/browser/site_isolation/site_per_process_text_input_interactive_uitest.cc
diff --git a/chrome/browser/ssl/ask_before_http_dialog_controller_uitest.cc b/chrome/browser/ssl/ask_before_http_dialog_controller_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ssl/ask_before_http_dialog_controller_uitest.cc
rename to chrome/browser/ssl/ask_before_http_dialog_controller_interactive_uitest.cc
diff --git a/chrome/browser/ssl/typed_navigation_upgrade_throttle_browsertest.cc b/chrome/browser/ssl/typed_navigation_upgrade_throttle_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ssl/typed_navigation_upgrade_throttle_browsertest.cc
rename to chrome/browser/ssl/typed_navigation_upgrade_throttle_interactive_uitest.cc
diff --git a/chrome/browser/startup/BUILD.gn b/chrome/browser/startup/BUILD.gn
new file mode 100644
index 0000000..192147f
--- /dev/null
+++ b/chrome/browser/startup/BUILD.gn
@@ -0,0 +1,29 @@
+# Copyright 2025 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+assert(!is_android, "Startup launch manager is only for desktop platforms")
+
+source_set("startup") {
+  public = [ "startup_launch_manager.h" ]
+
+  sources = [ "startup_launch_manager.cc" ]
+
+  deps = [
+    "//base",
+    "//chrome/common:non_code_constants",
+    "//chrome/installer/util:with_no_strings",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [ "startup_launch_manager_unittest.cc" ]
+
+  deps = [
+    ":startup",
+    "//base",
+    "//chrome/test:test_support",
+    "//testing/gmock",
+  ]
+}
diff --git a/chrome/browser/startup/OWNERS b/chrome/browser/startup/OWNERS
new file mode 100644
index 0000000..e612b1d
--- /dev/null
+++ b/chrome/browser/startup/OWNERS
@@ -0,0 +1,5 @@
+agale@chromium.org
+alsan@chromium.org
+atharvmaan@chromium.org
+estalin@chromium.org
+stluong@chromium.org
diff --git a/chrome/browser/background/startup_launch_manager.cc b/chrome/browser/startup/startup_launch_manager.cc
similarity index 97%
rename from chrome/browser/background/startup_launch_manager.cc
rename to chrome/browser/startup/startup_launch_manager.cc
index 402fc10..bf38d138 100644
--- a/chrome/browser/background/startup_launch_manager.cc
+++ b/chrome/browser/startup/startup_launch_manager.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/background/startup_launch_manager.h"
+#include "chrome/browser/startup/startup_launch_manager.h"
 
 #include "base/command_line.h"
 #include "base/functional/bind.h"
diff --git a/chrome/browser/background/startup_launch_manager.h b/chrome/browser/startup/startup_launch_manager.h
similarity index 87%
rename from chrome/browser/background/startup_launch_manager.h
rename to chrome/browser/startup/startup_launch_manager.h
index d4ef694..8ecc387 100644
--- a/chrome/browser/background/startup_launch_manager.h
+++ b/chrome/browser/startup/startup_launch_manager.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_BACKGROUND_STARTUP_LAUNCH_MANAGER_H_
-#define CHROME_BROWSER_BACKGROUND_STARTUP_LAUNCH_MANAGER_H_
+#ifndef CHROME_BROWSER_STARTUP_STARTUP_LAUNCH_MANAGER_H_
+#define CHROME_BROWSER_STARTUP_STARTUP_LAUNCH_MANAGER_H_
 
 #include <set>
 
@@ -42,4 +42,4 @@
   std::set<StartupLaunchReason> registered_launch_reasons_;
 };
 
-#endif  // CHROME_BROWSER_BACKGROUND_STARTUP_LAUNCH_MANAGER_H_
+#endif  // CHROME_BROWSER_STARTUP_STARTUP_LAUNCH_MANAGER_H_
diff --git a/chrome/browser/background/startup_launch_manager_unittest.cc b/chrome/browser/startup/startup_launch_manager_unittest.cc
similarity index 98%
rename from chrome/browser/background/startup_launch_manager_unittest.cc
rename to chrome/browser/startup/startup_launch_manager_unittest.cc
index 4bdb20d..66e9f49d 100644
--- a/chrome/browser/background/startup_launch_manager_unittest.cc
+++ b/chrome/browser/startup/startup_launch_manager_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/background/startup_launch_manager.h"
+#include "chrome/browser/startup/startup_launch_manager.h"
 
 #include <memory>
 
diff --git a/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc b/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
index 92c816b..80cc5fa 100644
--- a/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
@@ -2371,7 +2371,7 @@
 
   // Setup a primary account, but don't actually enable Sync-the-feature (so
   // that Sync will start in transport mode).
-  ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount());
+  ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly));
   // Note: Depending on the state of feature flags (specifically
   // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered
   // selected by default.
@@ -2435,7 +2435,7 @@
 
   // Setup a primary account, but don't actually enable Sync-the-feature (so
   // that Sync will start in transport mode).
-  ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount());
+  ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly));
   // Note: Depending on the state of feature flags (specifically
   // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered
   // selected by default.
@@ -2513,7 +2513,7 @@
 
   // Setup a primary account, but don't actually enable Sync-the-feature (so
   // that Sync will start in transport mode).
-  ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount());
+  ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly));
   // Note: Depending on the state of feature flags (specifically
   // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered
   // selected by default.
@@ -2582,7 +2582,7 @@
 
   // Setup a primary account, but don't actually enable Sync-the-feature (so
   // that Sync will start in transport mode).
-  ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount());
+  ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly));
   // Note: Depending on the state of feature flags (specifically
   // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered
   // selected by default.
@@ -2640,7 +2640,7 @@
 
   // Setup a primary account, but don't actually enable Sync-the-feature (so
   // that Sync will start in transport mode).
-  ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount());
+  ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly));
   // Note: Depending on the state of feature flags (specifically
   // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered
   // selected by default.
@@ -2699,7 +2699,7 @@
 
   // Setup a primary account, but don't actually enable Sync-the-feature (so
   // that Sync will start in transport mode).
-  ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount());
+  ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly));
   // Note: Depending on the state of feature flags (specifically
   // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered
   // selected by default.
@@ -2778,7 +2778,7 @@
       ->SetBookmarksLimitForTesting(4);
   // Setup a primary account, but don't actually enable Sync-the-feature (so
   // that Sync will start in transport mode).
-  ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount());
+  ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly));
   // Note: Depending on the state of feature flags (specifically
   // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered
   // selected by default.
@@ -2932,7 +2932,7 @@
 
   // Sign in again, but don't actually enable Sync-the-feature (so that Sync
   // will start in transport mode).
-  ASSERT_TRUE(GetClient(kSingleProfileIndex)->SignInPrimaryAccount());
+  ASSERT_TRUE(SetupSyncWithMode(SetupSyncMode::kSyncTransportOnly));
   // Note: Depending on the state of feature flags (specifically
   // kReplaceSyncPromosWithSignInPromos), Bookmarks may or may not be considered
   // selected by default.
diff --git a/chrome/browser/sync/test/integration/single_client_dictionary_sync_test.cc b/chrome/browser/sync/test/integration/single_client_dictionary_sync_test.cc
index 4746c3fc..3243326 100644
--- a/chrome/browser/sync/test/integration/single_client_dictionary_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_dictionary_sync_test.cc
@@ -52,18 +52,33 @@
   EXPECT_THAT(dictionary_helper::GetDictionaryWords(0), IsEmpty());
 }
 
-// History datatype is not supported in transport mode on ChromeOS yet.
-#if !BUILDFLAG(IS_CHROMEOS)
-IN_PROC_BROWSER_TEST_P(SingleClientDictionarySyncTest,
+INSTANTIATE_TEST_SUITE_P(, SingleClientDictionarySyncTest, ::testing::Bool());
+
+class SingleClientDictionaryTransportModeSyncTest
+    : public SingleClientDictionarySyncTest {
+ public:
+  SingleClientDictionaryTransportModeSyncTest() {
+    feature_list_.InitWithFeatures(
+        /*enabled_features=*/
+        {// `kEnablePreferencesAccountStorage` and
+         // `kSeparateLocalAndAccountSearchEngines`
+         // are required for enabling dictionary sync in transport mode because
+         // it shares the same user toggle as preferences and search engines.
+         switches::kEnablePreferencesAccountStorage,
+         syncer::kSeparateLocalAndAccountSearchEngines},
+        /*disabled_features=*/{});
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_P(SingleClientDictionaryTransportModeSyncTest,
                        ShouldStartDataTypeInTransportModeIfFeatureEnabled) {
   ASSERT_TRUE(SetupClients());
 
   // Sign in the primary account.
   ASSERT_TRUE(GetClient(0)->SignInPrimaryAccount());
-  // Enable history to enable DICTIONARY.
-  GetSyncService(0)->GetUserSettings()->SetSelectedType(
-      syncer::UserSelectableType::kHistory, true);
-
   ASSERT_TRUE(GetClient(0)->AwaitSyncTransportActive());
 
   // Whether or not the type is enabled in transport mode depends on the
@@ -71,43 +86,10 @@
   EXPECT_EQ(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY),
             GetParam());
 }
-#endif  // !BUILDFLAG(IS_CHROMEOS)
 
-INSTANTIATE_TEST_SUITE_P(, SingleClientDictionarySyncTest, ::testing::Bool());
-
-class SingleClientDictionaryWithoutAccountStorageSyncTest : public SyncTest {
- protected:
-  SingleClientDictionaryWithoutAccountStorageSyncTest()
-      : SyncTest(SINGLE_CLIENT) {
-    feature_list_.InitAndDisableFeature(
-        syncer::kSpellcheckSeparateLocalAndAccountDictionaries);
-  }
-
-  base::test::ScopedFeatureList feature_list_;
-};
-
-IN_PROC_BROWSER_TEST_F(SingleClientDictionaryWithoutAccountStorageSyncTest,
-                       ShouldNotBeBehindHistoryToggle) {
-  ASSERT_TRUE(SetupSync());
-
-  ASSERT_TRUE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY));
-
-  // DICTIONARY is not behind the history toggle.
-  ASSERT_TRUE(GetSyncService(0)->GetUserSettings()->GetSelectedTypes().Has(
-      syncer::UserSelectableType::kHistory));
-  ASSERT_TRUE(
-      GetClient(0)->DisableSyncForType(syncer::UserSelectableType::kHistory));
-  EXPECT_TRUE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY));
-
-  GetSyncService(0)->GetUserSettings()->SetSelectedType(
-      syncer::UserSelectableType::kHistory, true);
-  // DICTIONARY is behind the settings toggle.
-  ASSERT_TRUE(GetSyncService(0)->GetUserSettings()->GetSelectedTypes().Has(
-      syncer::UserSelectableType::kPreferences));
-  ASSERT_TRUE(GetClient(0)->DisableSyncForType(
-      syncer::UserSelectableType::kPreferences));
-  EXPECT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY));
-}
+INSTANTIATE_TEST_SUITE_P(,
+                         SingleClientDictionaryTransportModeSyncTest,
+                         ::testing::Bool());
 
 class SingleClientDictionaryWithAccountStorageSyncTest : public SyncTest {
  protected:
@@ -119,29 +101,6 @@
 };
 
 IN_PROC_BROWSER_TEST_F(SingleClientDictionaryWithAccountStorageSyncTest,
-                       ShouldBeBehindHistoryOptIn) {
-  ASSERT_TRUE(SetupSync());
-
-  ASSERT_TRUE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY));
-
-  // DICTIONARY is not behind the settings toggle.
-  ASSERT_TRUE(GetSyncService(0)->GetUserSettings()->GetSelectedTypes().Has(
-      syncer::UserSelectableType::kPreferences));
-  ASSERT_TRUE(GetClient(0)->DisableSyncForType(
-      syncer::UserSelectableType::kPreferences));
-  EXPECT_TRUE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY));
-
-  ASSERT_TRUE(GetClient(0)->EnableSyncForType(
-      syncer::UserSelectableType::kPreferences));
-  // DICTIONARY is behind the history toggle.
-  ASSERT_TRUE(GetSyncService(0)->GetUserSettings()->GetSelectedTypes().Has(
-      syncer::UserSelectableType::kHistory));
-  ASSERT_TRUE(
-      GetClient(0)->DisableSyncForType(syncer::UserSelectableType::kHistory));
-  EXPECT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY));
-}
-
-IN_PROC_BROWSER_TEST_F(SingleClientDictionaryWithAccountStorageSyncTest,
                        ShouldNotUploadLocalWordsToTheAccount) {
   ASSERT_TRUE(SetupClients());
   dictionary_helper::LoadDictionaries();
@@ -187,8 +146,8 @@
               UnorderedElementsAre(kLocalWord, kAccountWord));
 
   // Disable syncing dictionary, which is behind the preferences toggle.
-  ASSERT_TRUE(
-      GetClient(0)->DisableSyncForType(syncer::UserSelectableType::kHistory));
+  ASSERT_TRUE(GetClient(0)->DisableSyncForType(
+      syncer::UserSelectableType::kPreferences));
   ASSERT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY));
 
   // Account words should be cleared.
@@ -247,9 +206,9 @@
 
   // Clear the error to allow sync to become active again.
   GetFakeServer()->ClearHttpError();
-  // Disable syncing dictionary, which is behind the history toggle.
-  ASSERT_TRUE(
-      GetClient(0)->DisableSyncForType(syncer::UserSelectableType::kHistory));
+  // Disable syncing dictionary, which is behind the preferences toggle.
+  ASSERT_TRUE(GetClient(0)->DisableSyncForType(
+      syncer::UserSelectableType::kPreferences));
   ASSERT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::DICTIONARY));
 
   // Account words should be cleared.
diff --git a/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc b/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc
index ddb63d2..9398bab 100644
--- a/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc
@@ -38,21 +38,15 @@
 
 using testing::ContainerEq;
 
-syncer::DataTypeSet GetTypesGatedBehindHistoryOptIn() {
-  syncer::DataTypeSet types = {syncer::COLLABORATION_GROUP,
-                               syncer::HISTORY,
-                               syncer::HISTORY_DELETE_DIRECTIVES,
-                               syncer::SAVED_TAB_GROUP,
-                               syncer::SHARED_TAB_GROUP_DATA,
-                               syncer::SHARED_TAB_GROUP_ACCOUNT_DATA,
-                               syncer::SESSIONS,
-                               syncer::USER_EVENTS};
-  if (base::FeatureList::IsEnabled(
-          syncer::kSpellcheckSeparateLocalAndAccountDictionaries)) {
-    types.Put(syncer::DICTIONARY);
-  }
-  return types;
-}
+constexpr syncer::DataTypeSet kTypesGatedBehindHistoryOptIn{
+    syncer::COLLABORATION_GROUP,
+    syncer::HISTORY,
+    syncer::HISTORY_DELETE_DIRECTIVES,
+    syncer::SAVED_TAB_GROUP,
+    syncer::SHARED_TAB_GROUP_DATA,
+    syncer::SHARED_TAB_GROUP_ACCOUNT_DATA,
+    syncer::SESSIONS,
+    syncer::USER_EVENTS};
 
 base::FilePath GetTestFilePathForCacheGuid() {
   base::FilePath user_data_path;
@@ -161,9 +155,8 @@
             GetSyncService(0)->GetTransportState());
   ASSERT_FALSE(GetSyncService(0)->IsSyncFeatureActive());
 
-  syncer::DataTypeSet expected_types =
-      Difference(AllowedTypesInStandaloneTransportMode(),
-                 GetTypesGatedBehindHistoryOptIn());
+  syncer::DataTypeSet expected_types = Difference(
+      AllowedTypesInStandaloneTransportMode(), kTypesGatedBehindHistoryOptIn);
 
   // Bookmarks and reading list require a separate opt in, unless
   // `syncer::kReplaceSyncPromosWithSignInPromos` is enabled.
@@ -335,9 +328,8 @@
       syncer::UserSelectableType::kHistory));
 
   // Make sure that only the allowed types got activated.
-  syncer::DataTypeSet expected_types =
-      Difference(AllowedTypesInStandaloneTransportMode(),
-                 GetTypesGatedBehindHistoryOptIn());
+  syncer::DataTypeSet expected_types = Difference(
+      AllowedTypesInStandaloneTransportMode(), kTypesGatedBehindHistoryOptIn);
 
   // Bookmarks and reading list require a separate opt in, unless
   // `syncer::kReplaceSyncPromosWithSignInPromos` is enabled.
@@ -456,9 +448,8 @@
   ASSERT_FALSE(GetSyncService(0)->IsSyncFeatureEnabled());
 
   // Make sure that only the allowed types got activated.
-  syncer::DataTypeSet expected_types =
-      Difference(AllowedTypesInStandaloneTransportMode(),
-                 GetTypesGatedBehindHistoryOptIn());
+  syncer::DataTypeSet expected_types = Difference(
+      AllowedTypesInStandaloneTransportMode(), kTypesGatedBehindHistoryOptIn);
 
   if (GetParam()) {
 #if !(BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX))
diff --git a/chrome/browser/sync/test/integration/sync_app_helper.cc b/chrome/browser/sync/test/integration/sync_app_helper.cc
index 34ad1fe..590a363bc 100644
--- a/chrome/browser/sync/test/integration/sync_app_helper.cc
+++ b/chrome/browser/sync/test/integration/sync_app_helper.cc
@@ -41,7 +41,7 @@
 
   syncer::StringOrdinal app_launch_ordinal;
   syncer::StringOrdinal page_ordinal;
-  extensions::LaunchType launch_type = extensions::LAUNCH_TYPE_INVALID;
+  extensions::LaunchType launch_type = extensions::LaunchType::kInvalid;
   GURL launch_web_url;
   std::string description;
   std::string name;
diff --git a/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc b/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc
index 97d788c..bde90b8 100644
--- a/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_extension_apps_sync_test.cc
@@ -333,22 +333,22 @@
 
   // Change the launch type to window.
   extensions::SetLaunchType(GetProfile(1), extensions::kWebStoreAppId,
-                            extensions::LAUNCH_TYPE_WINDOW);
+                            extensions::LaunchType::kWindow);
   ASSERT_TRUE(AppsMatchChecker().Wait());
   ASSERT_EQ(extensions::GetLaunchTypePrefValue(
                 extensions::ExtensionPrefs::Get(GetProfile(0)),
                 extensions::kWebStoreAppId),
-            extensions::LAUNCH_TYPE_WINDOW);
+            extensions::LaunchType::kWindow);
 
   // Change the launch type to regular tab.
   extensions::SetLaunchType(GetProfile(1), extensions::kWebStoreAppId,
-                            extensions::LAUNCH_TYPE_REGULAR);
+                            extensions::LaunchType::kRegular);
   ASSERT_TRUE(AppsMatchChecker().Wait());
 
   ASSERT_EQ(extensions::GetLaunchTypePrefValue(
                 extensions::ExtensionPrefs::Get(GetProfile(0)),
                 extensions::kWebStoreAppId),
-            extensions::LAUNCH_TYPE_REGULAR);
+            extensions::LaunchType::kRegular);
 }
 
 IN_PROC_BROWSER_TEST_F(TwoClientExtensionAppsSyncTest, UnexpectedLaunchType) {
@@ -358,7 +358,7 @@
   ASSERT_TRUE(AllProfilesHaveSameApps());
 
   extensions::SetLaunchType(GetProfile(1), extensions::kWebStoreAppId,
-                            extensions::LAUNCH_TYPE_REGULAR);
+                            extensions::LaunchType::kRegular);
   ASSERT_TRUE(AppsMatchChecker().Wait());
 
   const extensions::Extension* extension =
@@ -380,7 +380,7 @@
       *extension, original_data.enabled(), original_data.disable_reasons(),
       original_data.incognito_enabled(), original_data.remote_install(),
       original_data.update_url(), original_data.app_launch_ordinal(),
-      original_data.page_ordinal(), extensions::NUM_LAUNCH_TYPES);
+      original_data.page_ordinal(), extensions::LaunchType::kNumLaunchTypes);
   extension_sync_service->ApplySyncData(invalid_launch_type_data);
 
   // The launch type should remain the same.
diff --git a/chrome/browser/tab_ui/android/BUILD.gn b/chrome/browser/tab_ui/android/BUILD.gn
index 8c5c694..1ee923d 100644
--- a/chrome/browser/tab_ui/android/BUILD.gn
+++ b/chrome/browser/tab_ui/android/BUILD.gn
@@ -156,6 +156,7 @@
     "//components/saved_tab_groups/public:java",
     "//components/saved_tab_groups/public:test_support_java",
     "//components/signin/public/android:java",
+    "//components/signin/public/android:signin_java_test_support",
     "//components/sync/android:sync_java",
     "//components/tab_groups:tab_groups_java",
     "//components/user_prefs/android:java",
diff --git a/chrome/browser/tab_ui/android/junit/src/org/chromium/chrome/browser/tab_ui/ActionConfirmationManagerUnitTest.java b/chrome/browser/tab_ui/android/junit/src/org/chromium/chrome/browser/tab_ui/ActionConfirmationManagerUnitTest.java
index 0e1e09d15..aaeccb4 100644
--- a/chrome/browser/tab_ui/android/junit/src/org/chromium/chrome/browser/tab_ui/ActionConfirmationManagerUnitTest.java
+++ b/chrome/browser/tab_ui/android/junit/src/org/chromium/chrome/browser/tab_ui/ActionConfirmationManagerUnitTest.java
@@ -45,9 +45,9 @@
 import org.chromium.chrome.browser.tab_ui.ActionConfirmationManager.MaybeBlockingResult;
 import org.chromium.components.browser_ui.widget.ActionConfirmationResult;
 import org.chromium.components.prefs.PrefService;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.identitymanager.IdentityManager;
+import org.chromium.components.signin.test.util.TestAccounts;
 import org.chromium.components.sync.DataType;
 import org.chromium.components.sync.SyncService;
 import org.chromium.components.user_prefs.UserPrefs;
@@ -65,7 +65,6 @@
 /** Unit tests for {@link ActionConfirmationManager}. */
 @RunWith(BaseRobolectricTestRunner.class)
 public class ActionConfirmationManagerUnitTest {
-    private static final String TEST_EMAIL = "test@gmail.com";
     private static final String GROUP_TITLE = "Group1";
 
     @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
@@ -83,7 +82,6 @@
     @Mock private UserPrefs.Natives mUserPrefsJni;
     @Mock private IdentityServicesProvider mIdentityServicesProvider;
     @Mock private IdentityManager mIdentityManager;
-    @Mock private CoreAccountInfo mCoreAccountInfo;
 
     @Captor private ArgumentCaptor<PropertyModel> mPropertyModelArgumentCaptor;
     @Captor private ArgumentCaptor<MaybeBlockingResult> mMaybeBlockingResultCaptor;
@@ -103,7 +101,7 @@
         IdentityServicesProvider.setInstanceForTests(mIdentityServicesProvider);
         when(mIdentityServicesProvider.getIdentityManager(mProfile)).thenReturn(mIdentityManager);
         when(mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN))
-                .thenReturn(mCoreAccountInfo);
+                .thenReturn(TestAccounts.ACCOUNT1);
 
         mActivityScenarioRule.getScenario().onActivity(this::onActivity);
     }
@@ -248,7 +246,6 @@
 
     @Test
     public void testProcessUngroupTabAttempt_SignInButNoSync() {
-        when(mCoreAccountInfo.getEmail()).thenReturn(TEST_EMAIL);
         when(mSyncService.getActiveDataTypes()).thenReturn(Collections.emptySet());
 
         ActionConfirmationManager actionConfirmationManager =
@@ -266,7 +263,6 @@
 
     @Test
     public void testProcessUngroupTabAttempt_SignInAndSync() {
-        when(mCoreAccountInfo.getEmail()).thenReturn(TEST_EMAIL);
         when(mSyncService.getActiveDataTypes())
                 .thenReturn(Collections.singleton(DataType.SAVED_TAB_GROUP));
 
diff --git a/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodControllerRobolectricTest.java b/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodControllerRobolectricTest.java
index a949e07..a7860c8 100644
--- a/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodControllerRobolectricTest.java
+++ b/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodControllerRobolectricTest.java
@@ -24,7 +24,9 @@
 import static org.chromium.chrome.browser.autofill.AutofillTestHelper.createVirtualCreditCard;
 import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_AFFILIATED_LOYALTY_CARDS_SCREEN_INDEX_SELECTED;
 import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_ALL_LOYALTY_CARDS_SCREEN_INDEX_SELECTED;
+import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN;
 import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_LINKED_ISSUER_SELECTED;
+import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN;
 import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_UNLINKED_ISSUER_SELECTED;
 import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_CREDIT_CARD_INDEX_SELECTED;
 import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillPaymentMethodMediator.TOUCH_TO_FILL_CREDIT_CARD_OUTCOME_HISTOGRAM;
@@ -1142,6 +1144,86 @@
     }
 
     @Test
+    public void testShowOneBnplIssuerRecordsHistograms() {
+        HistogramWatcher issuerSelectionScreenShownHistogram =
+                HistogramWatcher.newSingleRecordWatcher(
+                        TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN, 1);
+        HistogramWatcher numIssuersShownHistogram =
+                HistogramWatcher.newSingleRecordWatcher(
+                        TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN, 1);
+        mCoordinator
+                .getMediatorForTesting()
+                .showBnplIssuers(List.of(BNPL_ISSUER_CONTEXT_AFFIRM_LINKED));
+
+        issuerSelectionScreenShownHistogram.assertExpected();
+        numIssuersShownHistogram.assertExpected();
+    }
+
+    @Test
+    public void testShowTwoBnplIssuersRecordsHistograms() {
+        HistogramWatcher issuerSelectionScreenShownHistogram =
+                HistogramWatcher.newSingleRecordWatcher(
+                        TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN, 1);
+        HistogramWatcher numIssuersShownHistogram =
+                HistogramWatcher.newSingleRecordWatcher(
+                        TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN, 2);
+        mCoordinator
+                .getMediatorForTesting()
+                .showBnplIssuers(
+                        List.of(
+                                BNPL_ISSUER_CONTEXT_AFFIRM_LINKED,
+                                BNPL_ISSUER_CONTEXT_KLARNA_LINKED));
+
+        issuerSelectionScreenShownHistogram.assertExpected();
+        numIssuersShownHistogram.assertExpected();
+    }
+
+    @Test
+    public void testShowBnplIssuerTwiceRecordsHistograms() {
+        // Show the initial payment method selection screen.
+        mCoordinator.showPaymentMethods(
+                List.of(VISA_SUGGESTION, MASTERCARD_SUGGESTION),
+                /* shouldShowScanCreditCard= */ false);
+        assertThat(mTouchToFillPaymentMethodModel.get(CURRENT_SCREEN), is(HOME_SCREEN));
+
+        // Simulate showing the BNPL issuer selection bottom sheet for the first time.
+        mCoordinator
+                .getMediatorForTesting()
+                .showBnplIssuers(List.of(BNPL_ISSUER_CONTEXT_AFFIRM_LINKED));
+        assertThat(
+                mTouchToFillPaymentMethodModel.get(CURRENT_SCREEN),
+                is(BNPL_ISSUER_SELECTION_SCREEN));
+
+        // Simulate pressing the back button to return to the payment method selection screen.
+        ModelList sheetItems = mTouchToFillPaymentMethodModel.get(SHEET_ITEMS);
+        assertThat(sheetItems.get(0).type, is(BNPL_SELECTION_PROGRESS_HEADER));
+        PropertyModel bnplSelectionProgressHeaderModel = sheetItems.get(0).model;
+        bnplSelectionProgressHeaderModel
+                .get(
+                        TouchToFillPaymentMethodProperties.BnplSelectionProgressHeaderProperties
+                                .BNPL_ON_BACK_BUTTON_CLICKED)
+                .run();
+        assertThat(mTouchToFillPaymentMethodModel.get(CURRENT_SCREEN), is(HOME_SCREEN));
+
+        // Simulate showing the BNPL issuer selection bottom sheet again.
+        mCoordinator
+                .getMediatorForTesting()
+                .showBnplIssuers(List.of(BNPL_ISSUER_CONTEXT_AFFIRM_LINKED));
+        assertThat(
+                mTouchToFillPaymentMethodModel.get(CURRENT_SCREEN),
+                is(BNPL_ISSUER_SELECTION_SCREEN));
+
+        assertEquals(
+                2,
+                RecordHistogram.getHistogramValueCountForTesting(
+                        TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN, /* sample= */ 1));
+        assertEquals(
+                2,
+                RecordHistogram.getHistogramValueCountForTesting(
+                        TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN, /* sample= */ 1));
+    }
+
+    @Test
     public void testUpdateBnplPaymentMethodWithUnSupportedAmount() throws TimeoutException {
         mCoordinator.showPaymentMethods(
                 List.of(VISA_SUGGESTION, BNPL_SUGGESTION), /* shouldShowScanCreditCard= */ false);
@@ -1239,7 +1321,8 @@
                 R.string.autofill_bnpl_issuer_tos_bottom_sheet_half_height,
                 R.string.autofill_bnpl_issuer_tos_bottom_sheet_full_height,
                 R.string.autofill_bnpl_issuer_tos_bottom_sheet_closed,
-                org.chromium.chrome.browser.touch_to_fill.payments.R.id.touch_to_fill_bnpl_issuer_tos_screen);
+                org.chromium.chrome.browser.touch_to_fill.payments.R.id
+                        .touch_to_fill_bnpl_issuer_tos_screen);
 
         List<PropertyModel> headerModel = getModelsOfType(itemList, HEADER);
         assertThat(headerModel.size(), is(1));
diff --git a/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodMediator.java b/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodMediator.java
index b5c5053a..6797845 100644
--- a/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodMediator.java
+++ b/chrome/browser/touch_to_fill/autofill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillPaymentMethodMediator.java
@@ -281,6 +281,14 @@
     static final String TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_UNLINKED_ISSUER_SELECTED =
             "Autofill.TouchToFill.Bnpl.SelectIssuerScreen.UnlinkedIssuerSelected";
 
+    @VisibleForTesting
+    static final String TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN =
+            "Autofill.TouchToFill.Bnpl.SelectIssuerScreen.NumberOfIssuersShown";
+
+    @VisibleForTesting
+    static final String TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN =
+            "Autofill.TouchToFill.Bnpl.SelectIssuerScreen.Shown";
+
     // LINT.IfChange
     private static final String WALLET_LINK_TEXT = "wallet.google.com";
 
@@ -649,6 +657,12 @@
                 FOCUSED_VIEW_ID_FOR_ACCESSIBILITY, R.id.touch_to_fill_bnpl_issuer_selection_screen);
         mModel.set(SHEET_ITEMS, sheetItems);
         mModel.set(VISIBLE, true);
+
+        RecordHistogram.recordBooleanHistogram(
+                TOUCH_TO_FILL_BNPL_SELECT_ISSUER_SCREEN_SHOWN, /* sample= */ true);
+        RecordHistogram.recordCount100Histogram(
+                TOUCH_TO_FILL_BNPL_SELECT_ISSUER_NUMBER_OF_ISSUERS_SHOWN,
+                mBnplIssuerContexts.size());
     }
 
     public void showErrorScreen(String title, String description) {
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 47027a2d..3e5389f0 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1549,6 +1549,8 @@
       "//chrome/browser/ui/toolbar/pinned_toolbar:impl",
       "//chrome/browser/ui/user_education",
       "//chrome/browser/ui/user_education:impl",
+      "//chrome/browser/ui/views/contextual_tasks",
+      "//chrome/browser/ui/views/contextual_tasks:impl",
       "//chrome/browser/ui/views/location_bar",
       "//chrome/browser/ui/views/new_tab_footer",
       "//chrome/browser/ui/views/side_panel:side_panel_enums",
@@ -1738,6 +1740,7 @@
       "//chrome/browser/ui/tabs/saved_tab_groups:impl",
       "//chrome/browser/ui/toasts:impl",
       "//chrome/browser/ui/webui/customize_buttons",
+      "//chrome/browser/ui/views/contextual_tasks:impl",
       "//chrome/browser/ui/webui/customize_buttons:impl",
       "//chrome/browser/ui/views/toolbar",
       "//chrome/browser/ui/views/toolbar:impl",
@@ -3054,6 +3057,10 @@
   }
 
   if (is_win || is_mac) {
+    sources += [
+      "webui/updater/updater_ui.cc",
+      "webui/updater/updater_ui.h",
+    ]
     deps += [
       "//chrome/browser/ui/pdf/infobar",
       "//chrome/browser/ui/startup/default_browser_prompt/pin_infobar",
diff --git a/chrome/browser/ui/actions/chrome_action_id.h b/chrome/browser/ui/actions/chrome_action_id.h
index 7149109..936a150b3 100644
--- a/chrome/browser/ui/actions/chrome_action_id.h
+++ b/chrome/browser/ui/actions/chrome_action_id.h
@@ -92,6 +92,7 @@
   E(kActionPasswordsAndAutofillMenu, IDC_PASSWORDS_AND_AUTOFILL_MENU) \
   E(kActionShowMemorySaverChip) \
   E(kActionShowCookieControls) \
+  E(kActionContextualPanelPageActionChip) \
   /* Page-manipulation commands that target a specified tab, which may not */ \
   /* be the active one. */ \
   E(kActionMuteTargetSite, IDC_MUTE_TARGET_SITE) \
diff --git a/chrome/browser/ui/android/device_lock/BUILD.gn b/chrome/browser/ui/android/device_lock/BUILD.gn
index 976f0a4f..8262bd4bc 100644
--- a/chrome/browser/ui/android/device_lock/BUILD.gn
+++ b/chrome/browser/ui/android/device_lock/BUILD.gn
@@ -68,6 +68,7 @@
     "//components/browser_ui/device_lock/android:java",
     "//components/browser_ui/widget/android:java",
     "//components/signin/public/android:java",
+    "//components/signin/public/android:signin_java_test_support",
     "//content/public/test/android:content_java_test_support",
     "//third_party/android_deps:espresso_java",
     "//third_party/androidx:androidx_annotation_annotation_java",
diff --git a/chrome/browser/ui/android/device_lock/javatests/src/org/chromium/chrome/browser/ui/device_lock/MissingDeviceLockLauncherTest.java b/chrome/browser/ui/android/device_lock/javatests/src/org/chromium/chrome/browser/ui/device_lock/MissingDeviceLockLauncherTest.java
index 2348e14..d8545db 100644
--- a/chrome/browser/ui/android/device_lock/javatests/src/org/chromium/chrome/browser/ui/device_lock/MissingDeviceLockLauncherTest.java
+++ b/chrome/browser/ui/android/device_lock/javatests/src/org/chromium/chrome/browser/ui/device_lock/MissingDeviceLockLauncherTest.java
@@ -47,8 +47,8 @@
 import org.chromium.chrome.browser.signin.services.SigninManager;
 import org.chromium.chrome.browser.signin.services.SigninManager.DataWipeOption;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.IdentityManager;
+import org.chromium.components.signin.test.util.TestAccounts;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 import org.chromium.ui.test.util.BlankUiTestActivity;
@@ -74,7 +74,6 @@
     @Mock private IdentityManager mIdentityManager;
     @Mock private PersonalDataManager mPersonalDataManager;
     @Mock private Profile mProfile;
-    @Mock private CoreAccountInfo mCoreAccountInfo;
     @Mock private PasswordStoreBridge mPasswordStoreBridge;
 
     private MissingDeviceLockLauncher mMissingDeviceLockLauncher;
@@ -91,7 +90,6 @@
         mIdentityManager = Mockito.mock(IdentityManager.class);
         mPersonalDataManager = Mockito.mock(PersonalDataManager.class);
         mProfile = Mockito.mock(Profile.class);
-        mCoreAccountInfo = Mockito.mock(CoreAccountInfo.class);
 
         mSharedPreferencesManager = ChromeSharedPreferences.getInstance();
         mSharedPreferencesManager.removeKey(ChromePreferenceKeys.DEVICE_LOCK_SHOW_ALERT_IF_REMOVED);
@@ -202,7 +200,7 @@
         mSharedPreferencesManager.writeBoolean(
                 ChromePreferenceKeys.DEVICE_LOCK_SHOW_ALERT_IF_REMOVED, true);
 
-        doReturn(mCoreAccountInfo).when(mIdentityManager).getPrimaryAccountInfo(anyInt());
+        doReturn(TestAccounts.ACCOUNT1).when(mIdentityManager).getPrimaryAccountInfo(anyInt());
         doAnswer(
                         (invocation) -> {
                             SigninManager.SignOutCallback callback = invocation.getArgument(1);
@@ -237,7 +235,7 @@
         mSharedPreferencesManager.writeBoolean(
                 ChromePreferenceKeys.DEVICE_LOCK_SHOW_ALERT_IF_REMOVED, true);
 
-        doReturn(mCoreAccountInfo).when(mIdentityManager).getPrimaryAccountInfo(anyInt());
+        doReturn(TestAccounts.ACCOUNT1).when(mIdentityManager).getPrimaryAccountInfo(anyInt());
         doAnswer(
                         (invocation) -> {
                             SigninManager.SignOutCallback callback = invocation.getArgument(1);
diff --git a/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayerTest.java b/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayerTest.java
index bc0e3470..dd1a781 100644
--- a/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayerTest.java
+++ b/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayerTest.java
@@ -66,7 +66,7 @@
         mSceneLayer.setOffsetTag(offsetTag);
 
         RectF viewport = new RectF(0, 0, 100, 400);
-        mSceneLayer.getUpdatedSceneOverlayTree(viewport, viewport, null, 0);
+        mSceneLayer.getUpdatedSceneOverlayTree(viewport, viewport, null);
         verify(mSceneLayerJni)
                 .updateEdgeToEdgeBottomChinLayer(
                         123,
diff --git a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayer.java b/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayer.java
index 927f043..ecce330e 100644
--- a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayer.java
+++ b/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinSceneLayer.java
@@ -134,7 +134,7 @@
 
     @Override
     public SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) {
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager) {
         EdgeToEdgeBottomChinSceneLayerJni.get()
                 .updateEdgeToEdgeBottomChinLayer(
                         mNativePtr,
diff --git a/chrome/browser/ui/android/layouts/java/src/org/chromium/chrome/browser/layouts/SceneOverlay.java b/chrome/browser/ui/android/layouts/java/src/org/chromium/chrome/browser/layouts/SceneOverlay.java
index d2ed5c5..7da1189 100644
--- a/chrome/browser/ui/android/layouts/java/src/org/chromium/chrome/browser/layouts/SceneOverlay.java
+++ b/chrome/browser/ui/android/layouts/java/src/org/chromium/chrome/browser/layouts/SceneOverlay.java
@@ -24,12 +24,11 @@
      * @param viewport The viewport of the window.
      * @param visibleViewport The viewport accounting for browser controls.
      * @param resourceManager A resource manager.
-     * @param yOffset Current browser controls offset in dp.
      * @return A {@link SceneOverlayLayer} that represents an scene overlay. Or {@code null} if this
      *     {@link SceneOverlay} doesn't have a tree.
      */
     @Nullable SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset);
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager);
 
     /** Notify the {@link SceneOverlayLayer} that it should be removed from its parent. */
     void removeFromParent();
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
index bae5821..a85d03c 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -2961,6 +2961,9 @@
       <message name="IDS_CONTEXTMENU_OPEN_IN_NEW_CHROME_TAB" desc="Context sensitive menu item to open the selected link in a new Chrome tab from Chrome Custom Tab. [CHAR_LIMIT=30]">
         Open in new Chrome tab
       </message>
+      <message name="IDS_CONTEXTMENU_OPEN_IN_CHROME_WINDOW" desc="Context sensitive menu item to open the selected link in a Chrome window from Chrome Custom Tab. Used when there is a dedicated window for Incognito tabs. [CHAR_LIMIT=30]">
+        Open in Chrome window
+      </message>
       <message name="IDS_CONTEXTMENU_OPEN_IN_CHROME_INCOGNITO_TAB" desc="Context sensitive menu item to open the selected link in a Chrome Incognito tab from Chrome Custom Tab. [CHAR_LIMIT=30]">
         Open in Incognito tab
       </message>
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTMENU_OPEN_IN_CHROME_WINDOW.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTMENU_OPEN_IN_CHROME_WINDOW.png.sha1
new file mode 100644
index 0000000..a8136f24
--- /dev/null
+++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTMENU_OPEN_IN_CHROME_WINDOW.png.sha1
@@ -0,0 +1 @@
+44058b2dff8420b224afdafd89baca3ed1842b22
\ No newline at end of file
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarController.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarController.java
index ffba264..ecb23b5 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarController.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarController.java
@@ -384,7 +384,9 @@
             }
             case MiniOriginState.ANIMATING -> {
                 return switch (miniOriginEvent) {
-                    case MiniOriginEvent.CONTROLS_POSITION_BECAME_TOP -> MiniOriginState.NOT_READY;
+                    case MiniOriginEvent.FORM_FIELD_LOST_FOCUS,
+                            MiniOriginEvent.CONTROLS_POSITION_BECAME_TOP ->
+                            MiniOriginState.NOT_READY;
                     // A predictive back hide animation for the keyboard can be cancelled,
                     // ending in a transient state where the keyboard insets are not applied but
                     // it remains visible. To avoid visual glitches from hiding and reshowing,
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarControllerTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarControllerTest.java
index e960ba1..d6352f8b 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarControllerTest.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarControllerTest.java
@@ -483,6 +483,27 @@
     }
 
     @Test
+    public void testLoseFormFocusDuringAnimation() {
+        doReturn(ControlsPosition.BOTTOM).when(mBrowserControlsSizer).getControlsPosition();
+        mMiniOriginBarController.onControlsPositionChanged(ControlsPosition.BOTTOM);
+        final MiniOriginWindowInsetsAnimationListener animationListener =
+                mMiniOriginBarController.getAnimationListenerForTesting();
+        final BoundsCompat bounds = new BoundsCompat(Insets.NONE, Insets.of(0, 0, 0, 100));
+
+        mIsFormFieldFocused.onNodeAttributeUpdated(true, false);
+
+        animationListener.onPrepare(mImeAnimation);
+        animationListener.onStart(mImeAnimation, bounds);
+        mKeyboardVisibilityDelegate.setVisibilityForTests(true);
+        Assert.assertEquals(
+                MiniOriginState.ANIMATING, mMiniOriginBarController.getCurrentStateForTesting());
+
+        mIsFormFieldFocused.onNodeAttributeUpdated(false, false);
+        Assert.assertEquals(
+                MiniOriginState.NOT_READY, mMiniOriginBarController.getCurrentStateForTesting());
+    }
+
+    @Test
     public void testAnimateWithKeyboard_animationFinishesInStartingState() {
         // Predictive back gestures can cause an IME hide animation to run but finish with the IME
         // still showing if the gesture is cancelled.
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java
index a139d90..997bc3077 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java
@@ -119,7 +119,7 @@
 
     @Override
     public SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) {
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager) {
         boolean isShadowVisible;
         if (ChromeFeatureList.sBcivBottomControls.isEnabled()) {
             isShadowVisible = true;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarPreference.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarPreference.java
index d99d3a59..c487044 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarPreference.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarPreference.java
@@ -4,7 +4,10 @@
 
 package org.chromium.chrome.browser.toolbar.settings;
 
+import android.animation.ArgbEvaluator;
+import android.animation.ValueAnimator;
 import android.content.Context;
+import android.os.Handler;
 import android.util.AttributeSet;
 import android.widget.RadioGroup;
 
@@ -22,7 +25,9 @@
 import org.chromium.chrome.browser.prefs.LocalStatePrefs;
 import org.chromium.chrome.browser.toolbar.R;
 import org.chromium.chrome.browser.toolbar.ToolbarPositionController.ToolbarPositionAndSource;
+import org.chromium.chrome.browser.toolbar.settings.AddressBarSettingsFragment.HighlightedOption;
 import org.chromium.components.browser_ui.settings.ContainedRadioButtonGroupPreference;
+import org.chromium.components.browser_ui.styles.SemanticColorUtils;
 import org.chromium.components.browser_ui.widget.RadioButtonWithDescription;
 import org.chromium.components.browser_ui.widget.RadioButtonWithDescriptionLayout;
 import org.chromium.components.prefs.PrefService;
@@ -31,9 +36,13 @@
 @NullMarked
 public class AddressBarPreference extends ContainedRadioButtonGroupPreference
         implements RadioGroup.OnCheckedChangeListener {
+    private static final int HIGHLIGHT_ANIMATION_DELAY_MS = 3000;
+    private static final int HIGHLIGHT_ANIMATION_DURATION_MS = 1000;
+
     private RadioButtonWithDescriptionLayout mGroup;
     private RadioButtonWithDescription mTopButton;
     private RadioButtonWithDescription mBottomButton;
+    private @HighlightedOption int mHighlightedOption;
 
     // We choose this as a "default return value" because top omnibox is the default today. Choose
     // TOP_SETTINGS because TOP_LONG_PRESS causes an animation (see ToolbarPositionController).
@@ -46,6 +55,15 @@
         setLayoutResource(R.layout.address_bar_preference);
     }
 
+    /**
+     * Set Address Bar highlighted option. Called before onBindViewHolder.
+     *
+     * @param highlightedOption The highlighted option for this preference.
+     */
+    public void init(@HighlightedOption int highlightedOption) {
+        mHighlightedOption = highlightedOption;
+    }
+
     /** If native is initialized, writes the toolbar position and source. */
     public static void setToolbarPositionAndSource(@ToolbarPositionAndSource int sharedPref) {
         SharedPreferencesManager sharedPreferencesManager = ChromeSharedPreferences.getInstance();
@@ -162,6 +180,30 @@
         mTopButton = (RadioButtonWithDescription) holder.findViewById(R.id.address_bar_top);
         mBottomButton = (RadioButtonWithDescription) holder.findViewById(R.id.address_bar_bottom);
 
+        if (mHighlightedOption == HighlightedOption.BOTTOM_TOOLBAR) {
+            int highlightColor = SemanticColorUtils.getSettingsBackgroundColor(getContext());
+            int defaultColor = SemanticColorUtils.getDefaultBgColor(getContext());
+            mBottomButton.setBackgroundColor(highlightColor);
+
+            // Add a post delayed task to make the highlight fade out after a period of time.
+            new Handler()
+                    .postDelayed(
+                            () -> {
+                                if (!mBottomButton.isAttachedToWindow()) return;
+
+                                ValueAnimator colorAnimation =
+                                        ValueAnimator.ofObject(
+                                                new ArgbEvaluator(), highlightColor, defaultColor);
+                                colorAnimation.setDuration(HIGHLIGHT_ANIMATION_DURATION_MS);
+                                colorAnimation.addUpdateListener(
+                                        animator ->
+                                                mBottomButton.setBackgroundColor(
+                                                        (int) animator.getAnimatedValue()));
+                                colorAnimation.start();
+                            },
+                            HIGHLIGHT_ANIMATION_DELAY_MS);
+        }
+
         if (ChromeFeatureList.sAndroidSettingsContainment.isEnabled()) {
             // TODO(crbug.com/439911511): Set the value directly in the layout instead.
             int verticalPadding =
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragment.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragment.java
index 419cbb1..99a4ba29 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragment.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragment.java
@@ -8,9 +8,11 @@
 import android.content.res.Configuration;
 import android.os.Bundle;
 
+import androidx.annotation.IntDef;
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.DeviceInfo;
+import org.chromium.base.IntentUtils;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.build.annotations.NullMarked;
@@ -22,12 +24,23 @@
 import org.chromium.components.browser_ui.settings.SettingsUtils;
 import org.chromium.ui.base.DeviceFormFactor;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /** Fragment for address bar settings. */
 @NullMarked
 public class AddressBarSettingsFragment extends ChromeBaseSettingsFragment {
+    @IntDef({HighlightedOption.NONE, HighlightedOption.BOTTOM_TOOLBAR})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface HighlightedOption {
+        int NONE = 0;
+        int BOTTOM_TOOLBAR = 1;
+    }
+
     @VisibleForTesting static final String PREF_ADDRESS_BAR_HEADER = "address_bar_header";
     @VisibleForTesting static final String PREF_ADDRESS_BAR_PREFERENCE = "address_bar_preference";
     @VisibleForTesting static final String PREF_ADDRESS_BAR_TITLE = "address_bar_title";
+    public static final String HIGHLIGHTED_OPTION = "AddressBarSettingsFragment.HighlightedOption";
 
     private final ObservableSupplierImpl<String> mPageTitle = new ObservableSupplierImpl<>();
 
@@ -39,6 +52,13 @@
         if (!ChromeFeatureList.sAndroidSettingsContainment.isEnabled()) {
             findPreference(PREF_ADDRESS_BAR_TITLE).setTitle(summary);
         }
+
+        @HighlightedOption
+        int highlightedOption =
+                IntentUtils.safeGetInt(getArguments(), HIGHLIGHTED_OPTION, HighlightedOption.NONE);
+        ((AddressBarPreference) findPreference(PREF_ADDRESS_BAR_PREFERENCE))
+                .init(highlightedOption);
+
         overrideDescriptionIfFoldable();
     }
 
@@ -67,6 +87,17 @@
         return context.getString(R.string.address_bar_settings);
     }
 
+    /**
+     * Creates an argument bundle to open the Address Bar settings page.
+     *
+     * @param highlightedOption The highlighted option for the Address Bar settings page.
+     */
+    public static Bundle createArguments(@HighlightedOption int highlightedOption) {
+        Bundle result = new Bundle();
+        result.putInt(HIGHLIGHTED_OPTION, highlightedOption);
+        return result;
+    }
+
     @Override
     public @AnimationType int getAnimationType() {
         return AnimationType.PROPERTY;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragmentUnitTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragmentUnitTest.java
index 903c50e2..d16c6ed 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragmentUnitTest.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/settings/AddressBarSettingsFragmentUnitTest.java
@@ -18,6 +18,8 @@
 
 import android.app.Activity;
 import android.content.pm.PackageManager;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
 import android.widget.ImageView;
 
 import androidx.fragment.app.FragmentManager;
@@ -36,6 +38,7 @@
 import org.mockito.junit.MockitoRule;
 import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowLooper;
 import org.robolectric.shadows.ShadowPackageManager;
 
 import org.chromium.base.ContextUtils;
@@ -49,6 +52,8 @@
 import org.chromium.chrome.browser.prefs.LocalStatePrefs;
 import org.chromium.chrome.browser.prefs.LocalStatePrefsJni;
 import org.chromium.chrome.browser.toolbar.ToolbarPositionController.ToolbarPositionAndSource;
+import org.chromium.chrome.browser.toolbar.settings.AddressBarSettingsFragment.HighlightedOption;
+import org.chromium.components.browser_ui.styles.SemanticColorUtils;
 import org.chromium.components.browser_ui.widget.RadioButtonWithDescription;
 import org.chromium.components.prefs.PrefService;
 import org.chromium.ui.base.TestActivity;
@@ -105,7 +110,25 @@
         mActivity = (TestActivity) activity;
     }
 
-    private void launchFragment() {
+    @Test
+    @SmallTest
+    public void testBottomButtonHighlight() {
+        launchFragmentWithArgs(
+                AddressBarSettingsFragment.createArguments(HighlightedOption.BOTTOM_TOOLBAR));
+
+        ColorDrawable initialBackground = (ColorDrawable) mBottomButton.getBackground();
+        assertEquals(
+                SemanticColorUtils.getSettingsBackgroundColor(mActivity),
+                initialBackground.getColor());
+
+        // Run delayed animation that reverts the color.
+        ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
+
+        ColorDrawable finalBackground = (ColorDrawable) mBottomButton.getBackground();
+        assertEquals(SemanticColorUtils.getDefaultBgColor(mActivity), finalBackground.getColor());
+    }
+
+    private void launchFragmentWithArgs(Bundle args) {
         FragmentManager fragmentManager = mActivity.getSupportFragmentManager();
         mSettings =
                 (AddressBarSettingsFragment)
@@ -114,6 +137,7 @@
                                 .instantiate(
                                         AddressBarSettingsFragment.class.getClassLoader(),
                                         AddressBarSettingsFragment.class.getName());
+        mSettings.setArguments(args);
 
         fragmentManager.beginTransaction().replace(android.R.id.content, mSettings).commit();
         mActivityScenarioRule.getScenario().moveToState(State.STARTED);
@@ -143,7 +167,7 @@
         mSharedPreferencesManager.writeInt(
                 ChromePreferenceKeys.TOOLBAR_TOP_ANCHORED, ToolbarPositionAndSource.TOP_SETTINGS);
 
-        launchFragment();
+        launchFragmentWithArgs(null);
         assertEquals(
                 mActivity.getString(R.string.address_bar_settings_description),
                 mAddressBarTitle.getSummary());
@@ -176,7 +200,7 @@
                 ChromePreferenceKeys.TOOLBAR_TOP_ANCHORED,
                 ToolbarPositionAndSource.BOTTOM_SETTINGS);
 
-        launchFragment();
+        launchFragmentWithArgs(null);
         assertFalse(mTopButton.isChecked());
         assertTrue(mBottomButton.isChecked());
         assertFalse(mToolbarPositionImage.isSelected());
@@ -202,7 +226,7 @@
                 ChromePreferenceKeys.TOOLBAR_TOP_ANCHORED,
                 ToolbarPositionAndSource.BOTTOM_SETTINGS);
 
-        launchFragment();
+        launchFragmentWithArgs(null);
         assertFalse(mTopButton.isChecked());
         assertTrue(mBottomButton.isChecked());
         assertFalse(mToolbarPositionImage.isSelected());
@@ -228,7 +252,7 @@
         shadowPackageManager.setSystemFeature(PackageManager.FEATURE_SENSOR_HINGE_ANGLE, true);
         mSharedPreferencesManager.writeBoolean(ChromePreferenceKeys.TOOLBAR_TOP_ANCHORED, true);
 
-        launchFragment();
+        launchFragmentWithArgs(null);
         assertEquals(
                 mActivity.getString(R.string.address_bar_settings_description_foldable),
                 mAddressBarTitle.getSummary());
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java
index 39566b8..6e63b55 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarOverlayCoordinator.java
@@ -141,7 +141,7 @@
 
     @Override
     public SceneOverlayLayer getUpdatedSceneOverlayTree(
-            RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) {
+            RectF viewport, RectF visibleViewport, ResourceManager resourceManager) {
         return mSceneLayer;
     }
 
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc
index 294e979..ec503007 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.cc
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -1052,17 +1052,15 @@
 }
 
 bool ChromeAutofillClient::IsAutofillEnabled() const {
-  return IsAutofillProfileEnabled() || IsAutofillPaymentMethodsEnabled();
+  return IsAutofillProfileEnabled() ||
+         AutofillClient::GetPaymentsAutofillClient()
+             ->IsAutofillPaymentMethodsEnabled();
 }
 
 bool ChromeAutofillClient::IsAutofillProfileEnabled() const {
   return prefs::IsAutofillProfileEnabled(GetPrefs());
 }
 
-bool ChromeAutofillClient::IsAutofillPaymentMethodsEnabled() const {
-  return prefs::IsAutofillPaymentMethodsEnabled(GetPrefs());
-}
-
 bool ChromeAutofillClient::IsAutocompleteEnabled() const {
   return prefs::IsAutocompleteEnabled(GetPrefs());
 }
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.h b/chrome/browser/ui/autofill/chrome_autofill_client.h
index 1b4fb80..639ff617 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.h
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.h
@@ -196,7 +196,6 @@
       const base::flat_set<EntityTypeName>& saved_entities) final;
   bool IsAutofillEnabled() const final;
   bool IsAutofillProfileEnabled() const final;
-  bool IsAutofillPaymentMethodsEnabled() const final;
   bool IsAutocompleteEnabled() const final;
   bool IsWalletStorageEnabled() const final;
   bool IsPasswordManagerEnabled() const final;
diff --git a/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc b/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc
index fb739c1c..b0bf883 100644
--- a/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc
+++ b/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc
@@ -67,6 +67,7 @@
 #include "components/autofill/core/browser/ui/payments/card_unmask_prompt_view.h"
 #include "components/autofill/core/browser/ui/payments/save_and_fill_dialog_controller_impl.h"
 #include "components/autofill/core/common/autofill_payments_features.h"
+#include "components/autofill/core/common/autofill_prefs.h"
 #include "components/feature_engagement/public/feature_constants.h"
 #include "components/feature_engagement/public/tracker.h"
 #include "components/signin/public/identity_manager/account_info.h"
@@ -825,6 +826,12 @@
 #endif
 }
 
+bool ChromePaymentsAutofillClient::IsAutofillPaymentMethodsEnabled() const {
+  return prefs::IsAutofillPaymentMethodsEnabled(
+      Profile::FromBrowserContext(web_contents()->GetBrowserContext())
+          ->GetPrefs());
+}
+
 IbanManager* ChromePaymentsAutofillClient::GetIbanManager() {
   Profile* profile =
       Profile::FromBrowserContext(web_contents()->GetBrowserContext());
diff --git a/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.h b/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.h
index 518ceda..2752801 100644
--- a/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.h
+++ b/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.h
@@ -191,6 +191,7 @@
       base::OnceClosure cancel_mandatory_reauth_callback,
       base::RepeatingClosure close_mandatory_reauth_callback) override;
   void ShowMandatoryReauthOptInConfirmation() override;
+  bool IsAutofillPaymentMethodsEnabled() const final;
   IbanManager* GetIbanManager() override;
   IbanAccessManager* GetIbanAccessManager() override;
   MerchantPromoCodeManager* GetMerchantPromoCodeManager() override;
diff --git a/chrome/browser/ui/browser_actions.cc b/chrome/browser/ui/browser_actions.cc
index 72ef6de1..b975b34 100644
--- a/chrome/browser/ui/browser_actions.cc
+++ b/chrome/browser/ui/browser_actions.cc
@@ -1280,6 +1280,35 @@
                         vector_icons::kChatIcon,
                         kActionSidePanelShowContextualTasks, bwi, false)
             .Build());
+
+    if (contextual_tasks::kShowEntryPoint.Get() ==
+        contextual_tasks::EntryPointOption::kPageActionRevisit) {
+      actions::ActionItem::InvokeActionCallback contextual_task_callback =
+          base::BindRepeating(
+              [](BrowserWindowInterface* bwi, actions::ActionItem* item,
+                 actions::ActionInvocationContext context) {
+                if (!bwi) {
+                  return;
+                }
+                chrome::ShowContextualTasksSidePanel(bwi);
+              },
+              bwi);
+      root_action_item_->AddChild(
+          actions::ActionItem::Builder(contextual_task_callback)
+              .SetActionId(kActionContextualPanelPageActionChip)
+              .SetText(l10n_util::GetStringUTF16(
+                  IDS_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_TITLE))
+              .SetTooltipText(l10n_util::GetStringUTF16(
+                  IDS_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_TITLE))
+              .SetImage(ui::ImageModel::FromVectorIcon(vector_icons::kChatIcon,
+                                                       ui::kColorIcon))
+              .SetProperty(
+                  actions::kActionItemPinnableKey,
+                  static_cast<
+                      std::underlying_type_t<actions::ActionPinnableState>>(
+                      actions::ActionPinnableState::kPinnable))
+              .Build());
+    }
   }
 // TODO(crbug.com/454112198): Delete this after Multi Instance launches. This
 // is currently only used in the experimental single instance side panel.
diff --git a/chrome/browser/ui/browser_command_controller_interactive_browsertest.cc b/chrome/browser/ui/browser_command_controller_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ui/browser_command_controller_interactive_browsertest.cc
rename to chrome/browser/ui/browser_command_controller_interactive_uitest.cc
diff --git a/chrome/browser/ui/browser_element_identifiers.cc b/chrome/browser/ui/browser_element_identifiers.cc
index 4f2c48a..b3ab1c8 100644
--- a/chrome/browser/ui/browser_element_identifiers.cc
+++ b/chrome/browser/ui/browser_element_identifiers.cc
@@ -27,6 +27,7 @@
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTopEdgeElementId);
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTrailingEdgeElementId);
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTrailingTopCornerElementId);
+DEFINE_ELEMENT_IDENTIFIER_VALUE(kContextualTasksPageActionElementId);
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kContextualTasksSidePanelWebViewElementId);
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kCookieControlsIconElementId);
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kCustomizeChromeSidePanelWebViewElementId);
diff --git a/chrome/browser/ui/browser_element_identifiers.h b/chrome/browser/ui/browser_element_identifiers.h
index adfb2d19..8016aac9 100644
--- a/chrome/browser/ui/browser_element_identifiers.h
+++ b/chrome/browser/ui/browser_element_identifiers.h
@@ -36,6 +36,7 @@
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTopEdgeElementId);
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTrailingEdgeElementId);
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kContentsSeparatorTrailingTopCornerElementId);
+DECLARE_ELEMENT_IDENTIFIER_VALUE(kContextualTasksPageActionElementId);
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kContextualTasksSidePanelWebViewElementId);
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kCookieControlsIconElementId);
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kCustomizeChromeSidePanelWebViewElementId);
diff --git a/chrome/browser/ui/browser_focus_uitest.cc b/chrome/browser/ui/browser_focus_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ui/browser_focus_uitest.cc
rename to chrome/browser/ui/browser_focus_interactive_uitest.cc
diff --git a/chrome/browser/ui/cocoa/history_menu_bridge.mm b/chrome/browser/ui/cocoa/history_menu_bridge.mm
index 4dd6941..976904a 100644
--- a/chrome/browser/ui/cocoa/history_menu_bridge.mm
+++ b/chrome/browser/ui/cocoa/history_menu_bridge.mm
@@ -603,6 +603,10 @@
 void HistoryMenuBridge::OnURLVisited(
     history::HistoryService* history_service,
     const history::VisitedURLInfo& visited_url_info) {
+  if (visited_url_info.response_code_category ==
+      history::VisitResponseCodeCategory::k404) {
+    return;
+  }
   OnHistoryChanged();
 }
 
diff --git a/chrome/browser/ui/color/chrome_color_id.h b/chrome/browser/ui/color/chrome_color_id.h
index b633dd7e..41a8faa3 100644
--- a/chrome/browser/ui/color/chrome_color_id.h
+++ b/chrome/browser/ui/color/chrome_color_id.h
@@ -36,6 +36,7 @@
   E_CPONLY(kColorAvatarButtonHighlightGuest) \
   E_CPONLY(kColorAvatarButtonHighlightSyncError) \
   E_CPONLY(kColorAvatarButtonHighlightSyncPaused) \
+  E_CPONLY(kColorAvatarButtonHighlightPasskeysLocked) \
   E_CPONLY(kColorAvatarButtonHighlightSigninPaused) \
   E_CPONLY(kColorAvatarButtonHighlightExplicitText) \
   E_CPONLY(kColorAvatarButtonHighlightIncognito) \
diff --git a/chrome/browser/ui/color/chrome_color_mixer.cc b/chrome/browser/ui/color/chrome_color_mixer.cc
index 127072e..47d72f3 100644
--- a/chrome/browser/ui/color/chrome_color_mixer.cc
+++ b/chrome/browser/ui/color/chrome_color_mixer.cc
@@ -121,6 +121,8 @@
       ui::kColorAlertHighSeverity, kColorToolbar);
   mixer[kColorAvatarButtonHighlightSyncPaused] = {
       kColorAvatarButtonHighlightDefault};
+  mixer[kColorAvatarButtonHighlightPasskeysLocked] = {
+      kColorAvatarButtonHighlightDefault};
   mixer[kColorAvatarButtonHighlightSigninPaused] = {
       kColorAvatarButtonHighlightDefault};
   mixer[kColorAvatarButtonHighlightExplicitText] = {
diff --git a/chrome/browser/ui/color/material_chrome_color_mixer.cc b/chrome/browser/ui/color/material_chrome_color_mixer.cc
index 36268c1..206c112d 100644
--- a/chrome/browser/ui/color/material_chrome_color_mixer.cc
+++ b/chrome/browser/ui/color/material_chrome_color_mixer.cc
@@ -278,6 +278,8 @@
   mixer[kColorAppMenuChipInkDropRipple] = {ui::kColorSysStateRipplePrimary};
   mixer[kColorAvatarButtonHighlightSyncPaused] = {
       kColorAvatarButtonHighlightDefault};
+  mixer[kColorAvatarButtonHighlightPasskeysLocked] = {
+      kColorAvatarButtonHighlightDefault};
   mixer[kColorAvatarButtonHighlightSigninPaused] = {
       kColorAvatarButtonHighlightDefault};
   mixer[kColorAvatarButtonHighlightSyncError] = {ui::kColorSysErrorContainer};
diff --git a/chrome/browser/ui/extensions/BUILD.gn b/chrome/browser/ui/extensions/BUILD.gn
index 22244874..787cbd3 100644
--- a/chrome/browser/ui/extensions/BUILD.gn
+++ b/chrome/browser/ui/extensions/BUILD.gn
@@ -109,6 +109,7 @@
     sources += [
       "controlled_home_dialog.cc",
       "controlled_home_dialog_controller.cc",
+      "download_open_dialog.cc",
       "extension_action_view_model.cc",
       "extension_install_blocked_dialog.cc",
       "extension_install_friction_dialog.cc",
diff --git a/chrome/browser/download/download_open_dialog.cc b/chrome/browser/ui/extensions/download_open_dialog.cc
similarity index 97%
rename from chrome/browser/download/download_open_dialog.cc
rename to chrome/browser/ui/extensions/download_open_dialog.cc
index 1ec2741..b79735e1 100644
--- a/chrome/browser/download/download_open_dialog.cc
+++ b/chrome/browser/ui/extensions/download_open_dialog.cc
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/download/download_open_dialog.h"
-
 #include <memory>
 #include <utility>
 
@@ -40,6 +38,8 @@
 
 }  // namespace
 
+namespace extensions {
+
 void ShowDownloadOpenConfirmationDialog(
     content::WebContents* web_contents,
     const std::string& extension_name,
@@ -86,3 +86,5 @@
 
   ShowWebModalDialog(web_contents, std::move(dialog));
 }
+
+}  // namespace extensions
diff --git a/chrome/browser/ui/extensions/extensions_dialogs.h b/chrome/browser/ui/extensions/extensions_dialogs.h
index 3d8238b..c5c27fb 100644
--- a/chrome/browser/ui/extensions/extensions_dialogs.h
+++ b/chrome/browser/ui/extensions/extensions_dialogs.h
@@ -72,6 +72,15 @@
     gfx::NativeWindow parent,
     std::unique_ptr<ControlledHomeDialogControllerInterface> controller);
 
+// Shows a dialog that prompts the user for whether to open a DownloadItem using
+// native UI. This step is necessary to prevent a malicious extension from
+// opening any downloaded file.
+void ShowDownloadOpenConfirmationDialog(
+    content::WebContents* web_contents,
+    const std::string& extension_name,
+    const base::FilePath& file_path,
+    base::OnceCallback<void(bool)> open_callback);
+
 // Shows a modal dialog to Enhanced Safe Browsing users before the extension
 // install dialog if the extension is not included in the Safe Browsing CRX
 // allowlist. `callback` will be invoked with `true` if the user accepts or
diff --git a/chrome/browser/ui/keyboard_lock_interactive_browsertest.cc b/chrome/browser/ui/keyboard_lock_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ui/keyboard_lock_interactive_browsertest.cc
rename to chrome/browser/ui/keyboard_lock_interactive_uitest.cc
diff --git a/chrome/browser/ui/lens/lens_overlay_controller.cc b/chrome/browser/ui/lens/lens_overlay_controller.cc
index fcb8d094..ac373c8 100644
--- a/chrome/browser/ui/lens/lens_overlay_controller.cc
+++ b/chrome/browser/ui/lens/lens_overlay_controller.cc
@@ -63,7 +63,6 @@
 #include "chrome/browser/ui/user_education/browser_user_education_interface.h"
 #include "chrome/browser/ui/views/interaction/browser_elements_views.h"
 #include "chrome/browser/ui/views/side_panel/side_panel.h"
-#include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_entry.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_entry_key.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_enums.h"
@@ -964,9 +963,9 @@
 
   Profile* profile =
       Profile::FromBrowserContext(tab_->GetContents()->GetBrowserContext());
-  auto* side_panel_coordinator =
-      tab_->GetBrowserWindowInterface()->GetFeatures().side_panel_coordinator();
-  CHECK(side_panel_coordinator);
+  auto* const side_panel_ui =
+      tab_->GetBrowserWindowInterface()->GetFeatures().side_panel_ui();
+  CHECK(side_panel_ui);
 
   // Create the languages controller.
   languages_controller_ =
@@ -975,11 +974,10 @@
   // Setup observer to be notified of side panel opens and closes.
   SidePanelEntry::PanelType panel_type =
       GetLensOverlaySidePanelCoordinator()->GetPanelType();
-  side_panel_shown_subscription_ =
-      side_panel_coordinator->RegisterSidePanelShown(
-          panel_type,
-          base::BindRepeating(&LensOverlayController::OnSidePanelDidOpen,
-                              weak_factory_.GetWeakPtr()));
+  side_panel_shown_subscription_ = side_panel_ui->RegisterSidePanelShown(
+      panel_type,
+      base::BindRepeating(&LensOverlayController::OnSidePanelDidOpen,
+                          weak_factory_.GetWeakPtr()));
 
   if (find_in_page::FindTabHelper* const find_tab_helper =
           find_in_page::FindTabHelper::FromWebContents(tab_->GetContents())) {
@@ -1027,12 +1025,13 @@
 
   // This should be the last thing called in ShowUI, so if something goes wrong
   // in capturing the screenshot, the state gets cleaned up correctly.
-  if (side_panel_coordinator->IsSidePanelShowing(panel_type) &&
+  if (side_panel_ui->IsSidePanelShowing(panel_type) &&
       !IsResultsSidePanelShowing()) {
     // Close the currently opened side panel synchronously if it's not the Lens
     // panel. Postpone the screenshot for a fixed time to allow reflow.
     state_ = State::kClosingOpenedSidePanel;
-    side_panel_coordinator->Close(/*suppress_animations=*/true, panel_type);
+    side_panel_ui->Close(panel_type, SidePanelEntryHideReason::kSidePanelClosed,
+                         /*suppress_animations=*/true);
     base::SingleThreadTaskRunner::GetCurrentDefault()
         ->PostNonNestableDelayedTask(
             FROM_HERE,
diff --git a/chrome/browser/ui/page_action/page_action_icon_type.cc b/chrome/browser/ui/page_action/page_action_icon_type.cc
index 5c6a81b5..77b7072 100644
--- a/chrome/browser/ui/page_action/page_action_icon_type.cc
+++ b/chrome/browser/ui/page_action/page_action_icon_type.cc
@@ -71,6 +71,10 @@
 }  // namespace
 
 bool IsPageActionMigrated(PageActionIconType page_action) {
+  if (page_action == PageActionIconType::kContextualSidePanel) {
+    return true;
+  }
+
   const auto* feature_param = GetPageActionsMigrationParam(page_action);
   if (feature_param == nullptr) {
     return false;
diff --git a/chrome/browser/ui/page_action/page_action_icon_type.h b/chrome/browser/ui/page_action/page_action_icon_type.h
index 91ec354..c8e184c 100644
--- a/chrome/browser/ui/page_action/page_action_icon_type.h
+++ b/chrome/browser/ui/page_action/page_action_icon_type.h
@@ -50,7 +50,8 @@
   kLensOverlayHomework = 34,
   kAiMode = 35,
   kReadingMode = 36,
-  kMaxValue = kReadingMode,
+  kContextualSidePanel = 37,
+  kMaxValue = kContextualSidePanel,
 };
 // LINT.ThenChange(//tools/metrics/histograms/metadata/page/enums.xml:PageActionIconType)
 
@@ -87,6 +88,7 @@
 static_assert(static_cast<int>(PageActionIconType::kLensOverlayHomework) == 34);
 static_assert(static_cast<int>(PageActionIconType::kAiMode) == 35);
 static_assert(static_cast<int>(PageActionIconType::kReadingMode) == 36);
+static_assert(static_cast<int>(PageActionIconType::kContextualSidePanel) == 37);
 
 // Returns a bool indicating whether the given page action type has been
 // migrated to the new framework, which is based on ActionItems instead of
diff --git a/chrome/browser/ui/read_anything/read_anything_side_panel_controller.cc b/chrome/browser/ui/read_anything/read_anything_side_panel_controller.cc
index bef7979..5e3f9a47 100644
--- a/chrome/browser/ui/read_anything/read_anything_side_panel_controller.cc
+++ b/chrome/browser/ui/read_anything/read_anything_side_panel_controller.cc
@@ -20,9 +20,9 @@
 #include "chrome/browser/ui/read_anything/read_anything_side_panel_web_view.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/interaction/browser_elements_views.h"
-#include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_entry.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_registry.h"
+#include "chrome/browser/ui/views/side_panel/side_panel_ui.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_web_ui_view.h"
 #include "chrome/browser/ui/webui/side_panel/read_anything/read_anything_prefs.h"
 #include "chrome/browser/ui/webui/side_panel/read_anything/read_anything_untrusted_page_handler.h"
@@ -254,12 +254,12 @@
   if (!tab_->IsActivated()) {
     return;
   }
-  auto* coordinator =
-      tab_->GetBrowserWindowInterface()->GetFeatures().side_panel_coordinator();
+  auto* const side_panel_ui =
+      tab_->GetBrowserWindowInterface()->GetFeatures().side_panel_ui();
   // TODO(https://crbug.com/360163254): BrowserWithTestWindowTest currently does
   // not create a SidePanelCoordinator. This block will be unnecessary once that
   // changes.
-  if (!coordinator) {
+  if (!side_panel_ui) {
     // TODO(webium): create a SidePanelCoordinator for WebUIBrowser.
     // This is a temporary solution to avoid a crash.
     if (!webui_browser::IsWebUIBrowserEnabled()) {
@@ -269,11 +269,13 @@
   }
 
   SidePanelEntry::Key read_anything_key(SidePanelEntry::Id::kReadAnything);
-  if (coordinator->IsSidePanelEntryShowing(read_anything_key)) {
+  if (side_panel_ui->IsSidePanelEntryShowing(read_anything_key)) {
     SidePanelEntry* const entry =
         side_panel_registry_->GetEntryForKey(read_anything_key);
     CHECK(entry);
-    coordinator->Close(/*suppress_animations=*/true, entry->type());
+    side_panel_ui->Close(entry->type(),
+                         SidePanelEntryHideReason::kSidePanelClosed,
+                         /*suppress_animations=*/true);
   }
 }
 
diff --git a/chrome/browser/ui/tabs/BUILD.gn b/chrome/browser/ui/tabs/BUILD.gn
index 3438cfe..37660edf 100644
--- a/chrome/browser/ui/tabs/BUILD.gn
+++ b/chrome/browser/ui/tabs/BUILD.gn
@@ -547,6 +547,7 @@
       "//chrome/browser/ui/toolbar",
       "//chrome/browser/ui/toolbar/pinned_toolbar",
       "//chrome/browser/ui/user_education",
+      "//chrome/browser/ui/views/contextual_tasks",
       "//chrome/browser/ui/views/intent_picker:intent_picker_page_action",
       "//chrome/browser/ui/views/interaction",
       "//chrome/browser/ui/views/location_bar",
@@ -561,6 +562,7 @@
       "//chrome/browser/web_applications",
       "//components/browsing_topics",
       "//components/content_settings/core/browser",
+      "//components/contextual_tasks/public",
       "//components/favicon/content",
       "//components/favicon/core",
       "//components/fingerprinting_protection_filter/common:features",
diff --git a/chrome/browser/ui/tabs/alert/BUILD.gn b/chrome/browser/ui/tabs/alert/BUILD.gn
index 91845d7..b7ce5b36 100644
--- a/chrome/browser/ui/tabs/alert/BUILD.gn
+++ b/chrome/browser/ui/tabs/alert/BUILD.gn
@@ -24,6 +24,7 @@
   ]
 
   deps = [
+    "//chrome/browser/actor/ui",
     "//chrome/browser/media/webrtc",
     "//chrome/browser/ui/color:color_headers",
     "//chrome/browser/ui/tabs",
diff --git a/chrome/browser/ui/tabs/alert/tab_alert.h b/chrome/browser/ui/tabs/alert/tab_alert.h
index c709b22..00ddcc55 100644
--- a/chrome/browser/ui/tabs/alert/tab_alert.h
+++ b/chrome/browser/ui/tabs/alert/tab_alert.h
@@ -26,6 +26,7 @@
   kGlicAccessing,          // Glic is accessing the tab's contents.
   kGlicSharing,            // The tab's contents are shared with glic.
   kActorAccessing,         // Actor is accessing the tab's contents.
+  kActorWaitingOnUser,     // Actor is waiting on user to respond.
 };
 // Any changes to the TabAlert enum needs to be updated in CompareAlerts as
 // well.
diff --git a/chrome/browser/ui/tabs/alert/tab_alert_controller.cc b/chrome/browser/ui/tabs/alert/tab_alert_controller.cc
index ad2e9662..6d0128ea 100644
--- a/chrome/browser/ui/tabs/alert/tab_alert_controller.cc
+++ b/chrome/browser/ui/tabs/alert/tab_alert_controller.cc
@@ -14,7 +14,6 @@
 #include "base/containers/to_vector.h"
 #include "base/functional/bind.h"
 #include "chrome/browser/actor/ui/actor_ui_tab_controller.h"
-#include "chrome/browser/actor/ui/actor_ui_tab_controller_interface.h"
 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
 #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h"
 #include "chrome/browser/ui/recently_audible_helper.h"
@@ -40,16 +39,17 @@
   // Alerts are ordered from highest priority to be shown to lowest priority.
   static constexpr auto tab_alert_priority =
       base::MakeFixedFlatMap<TabAlert, int>(
-          {{TabAlert::kDesktopCapturing, 16},
-           {TabAlert::kTabCapturing, 15},
-           {TabAlert::kMediaRecording, 14},
-           {TabAlert::kAudioRecording, 13},
-           {TabAlert::kVideoRecording, 12},
-           {TabAlert::kBluetoothConnected, 11},
-           {TabAlert::kBluetoothScanActive, 10},
-           {TabAlert::kUsbConnected, 9},
-           {TabAlert::kHidConnected, 8},
-           {TabAlert::kSerialConnected, 7},
+          {{TabAlert::kDesktopCapturing, 17},
+           {TabAlert::kTabCapturing, 16},
+           {TabAlert::kMediaRecording, 15},
+           {TabAlert::kAudioRecording, 14},
+           {TabAlert::kVideoRecording, 13},
+           {TabAlert::kBluetoothConnected, 12},
+           {TabAlert::kBluetoothScanActive, 11},
+           {TabAlert::kUsbConnected, 10},
+           {TabAlert::kHidConnected, 9},
+           {TabAlert::kSerialConnected, 8},
+           {TabAlert::kActorWaitingOnUser, 7},
            {TabAlert::kActorAccessing, 6},
            {TabAlert::kGlicAccessing, 5},
            {TabAlert::kGlicSharing, 4},
@@ -161,9 +161,10 @@
     case tabs::TabAlert::kVrPresentingInHeadset:
       return l10n_util::GetStringUTF16(
           IDS_TOOLTIP_TAB_ALERT_STATE_VR_PRESENTING);
-    // TODO(crbug.com/422538779) Create new resources for ACTOR_ACCESSING of
+    // TODO(crbug.com/461457730) Create new resources for ACTOR_ACCESSING of
     // relying on GLIC_ACCESSING resources below.
     case tabs::TabAlert::kActorAccessing:
+    case tabs::TabAlert::kActorWaitingOnUser:
     case tabs::TabAlert::kGlicAccessing:
 #if BUILDFLAG(ENABLE_GLIC)
       return l10n_util::GetStringUTF16(
@@ -323,8 +324,22 @@
 }
 #endif  // BUILDFLAG(ENABLE_GLIC)
 
-void TabAlertController::OnActorTabIndicatorStateChanged(bool is_accessing) {
-  UpdateAlertState(TabAlert::kActorAccessing, is_accessing);
+void TabAlertController::OnActorTabIndicatorStateChanged(
+    actor::ui::TabIndicatorStatus tab_indicator_status) {
+  switch (tab_indicator_status) {
+    case actor::ui::TabIndicatorStatus::kNone:
+      UpdateAlertState(TabAlert::kActorWaitingOnUser, false);
+      UpdateAlertState(TabAlert::kActorAccessing, false);
+      break;
+    case actor::ui::TabIndicatorStatus::kDynamic:
+      UpdateAlertState(TabAlert::kActorWaitingOnUser, false);
+      UpdateAlertState(TabAlert::kActorAccessing, true);
+      break;
+    case actor::ui::TabIndicatorStatus::kStatic:
+      UpdateAlertState(TabAlert::kActorWaitingOnUser, true);
+      UpdateAlertState(TabAlert::kActorAccessing, false);
+      break;
+  }
 }
 
 void TabAlertController::OnRecentlyAudibleStateChanged(bool was_audible) {
diff --git a/chrome/browser/ui/tabs/alert/tab_alert_controller.h b/chrome/browser/ui/tabs/alert/tab_alert_controller.h
index 79e1313..381401d 100644
--- a/chrome/browser/ui/tabs/alert/tab_alert_controller.h
+++ b/chrome/browser/ui/tabs/alert/tab_alert_controller.h
@@ -23,6 +23,10 @@
 class WebContents;
 }  // namespace content
 
+namespace actor::ui {
+enum class TabIndicatorStatus;
+}  // namespace actor::ui
+
 namespace tabs {
 class TabInterface;
 
@@ -97,7 +101,8 @@
   void OnGlicAccessingStateChange(bool is_accessing);
 #endif  // BUILDFLAG(ENABLE_GLIC)
 
-  void OnActorTabIndicatorStateChanged(bool is_accessing);
+  void OnActorTabIndicatorStateChanged(
+      actor::ui::TabIndicatorStatus tab_indicator_state);
   void OnRecentlyAudibleStateChanged(bool was_audible);
 
   // Adds `alert` to the set of already active alerts for this tab if it isn't
diff --git a/chrome/browser/ui/tabs/alert/tab_alert_icon.cc b/chrome/browser/ui/tabs/alert/tab_alert_icon.cc
index 238dc99..a08f5b1f 100644
--- a/chrome/browser/ui/tabs/alert/tab_alert_icon.cc
+++ b/chrome/browser/ui/tabs/alert/tab_alert_icon.cc
@@ -33,6 +33,7 @@
     case tabs::TabAlert::kPipPlaying:
     case tabs::TabAlert::kGlicAccessing:
     case tabs::TabAlert::kGlicSharing:
+    case tabs::TabAlert::kActorWaitingOnUser:
     case tabs::TabAlert::kActorAccessing:
       group = 1;
       break;
@@ -93,6 +94,7 @@
       return vector_icons::kPictureInPictureAltIcon;
     case TabAlert::kVrPresentingInHeadset:
       return vector_icons::kCardboardIcon;
+    case TabAlert::kActorWaitingOnUser:
     case TabAlert::kActorAccessing:
     case TabAlert::kGlicAccessing:
     case TabAlert::kGlicSharing:
diff --git a/chrome/browser/ui/tabs/public/tab_features.h b/chrome/browser/ui/tabs/public/tab_features.h
index 339b8869..dbf1f05 100644
--- a/chrome/browser/ui/tabs/public/tab_features.h
+++ b/chrome/browser/ui/tabs/public/tab_features.h
@@ -15,6 +15,7 @@
 
 class AskBeforeHttpDialogController;
 class CollaborationMessagingPageActionController;
+class ContextualTasksPageActionController;
 class CookieControlsPageActionController;
 class FileSystemAccessPageActionController;
 class FromGWSNavigationAndKeepAliveRequestObserver;
@@ -416,6 +417,11 @@
   std::unique_ptr<tab_groups::CollaborationMessagingTabData>
       collaboration_messaging_tab_data_;
 
+  // Controller to trigger when the contextual task page action chip to
+  // show/hide.
+  std::unique_ptr<ContextualTasksPageActionController>
+      contextual_tasks_page_action_controller_;
+
   // Responsible for managing the "Show Collaboration History" page action.
   std::unique_ptr<CollaborationMessagingPageActionController>
       collaboration_messaging_page_action_controller_;
diff --git a/chrome/browser/ui/tabs/tab_features.cc b/chrome/browser/ui/tabs/tab_features.cc
index 91d0acfe..ffd0d0e 100644
--- a/chrome/browser/ui/tabs/tab_features.cc
+++ b/chrome/browser/ui/tabs/tab_features.cc
@@ -68,6 +68,7 @@
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/views/commerce/discounts_page_action_view_controller.h"
 #include "chrome/browser/ui/views/commerce/price_insights_page_action_view_controller.h"
+#include "chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.h"
 #include "chrome/browser/ui/views/file_system_access/file_system_access_page_action_controller.h"
 #include "chrome/browser/ui/views/intent_picker/intent_picker_view_page_action_controller.h"
 #include "chrome/browser/ui/views/location_bar/cookie_controls/cookie_controls_page_action_controller.h"
@@ -83,6 +84,7 @@
 #include "chrome/browser/ui/views/zoom/zoom_view_controller.h"
 #include "chrome/browser/ui/web_applications/pwa_install_page_action.h"
 #include "chrome/browser/ui/webui/webui_embedding_context.h"
+#include "components/contextual_tasks/public/features.h"
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
     BUILDFLAG(IS_CHROMEOS)
 #include "chrome/browser/wallet/chrome_walletable_pass_client.h"
@@ -232,6 +234,14 @@
               .CreateInstance<LensOverlayHomeworkPageActionController>(
                   tab, tab, *profile, *page_action_controller_);
     }
+
+    if (base::FeatureList::IsEnabled(contextual_tasks::kContextualTasks) &&
+        (contextual_tasks::kShowEntryPoint.Get() ==
+         contextual_tasks::EntryPointOption::kPageActionRevisit)) {
+      contextual_tasks_page_action_controller_ =
+          GetUserDataFactory()
+              .CreateInstance<ContextualTasksPageActionController>(tab, &tab);
+    }
   }
 
   // Features that are only enabled for normal browser windows. By default most
diff --git a/chrome/browser/ui/tabs/tab_strip_api/converters/tab_converters.cc b/chrome/browser/ui/tabs/tab_strip_api/converters/tab_converters.cc
index 81fee6f7..ac00ac5 100644
--- a/chrome/browser/ui/tabs/tab_strip_api/converters/tab_converters.cc
+++ b/chrome/browser/ui/tabs/tab_strip_api/converters/tab_converters.cc
@@ -69,6 +69,8 @@
       return mojom::AlertState::kGlicSharing;
     case tabs::TabAlert::kActorAccessing:
       return mojom::AlertState::kActorAccessing;
+    case tabs::TabAlert::kActorWaitingOnUser:
+      return mojom::AlertState::kActorWaitingOnUser;
   }
 }
 
diff --git a/chrome/browser/ui/views/autofill/payments/iban_bubble_view_uitest.cc b/chrome/browser/ui/views/autofill/payments/iban_bubble_view_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ui/views/autofill/payments/iban_bubble_view_uitest.cc
rename to chrome/browser/ui/views/autofill/payments/iban_bubble_view_interactive_uitest.cc
diff --git a/chrome/browser/ui/views/contextual_tasks/BUILD.gn b/chrome/browser/ui/views/contextual_tasks/BUILD.gn
new file mode 100644
index 0000000..f38d06419
--- /dev/null
+++ b/chrome/browser/ui/views/contextual_tasks/BUILD.gn
@@ -0,0 +1,40 @@
+# Copyright 2025 The Chromium Authors
+# Use of this source code is governed by a BSD - style license that can be
+# found in the LICENSE file.
+
+assert(is_win || is_mac || is_linux || is_chromeos)
+
+source_set("contextual_tasks") {
+  sources = [ "contextual_tasks_page_action_controller.h" ]
+  public_deps = [
+    "//chrome/browser/ui/views/page_action",
+    "//components/contextual_tasks/public",
+  ]
+}
+
+source_set("impl") {
+  sources = [ "contextual_tasks_page_action_controller.cc" ]
+
+  deps = [
+    ":contextual_tasks",
+    "//chrome/browser/contextual_tasks",
+    "//chrome/browser/ui/browser_window",
+    "//chrome/browser/ui/views/side_panel",
+    "//components/contextual_tasks/public:feature_list",
+    "//components/vector_icons",
+  ]
+}
+
+source_set("interactive_ui_tests") {
+  testonly = true
+  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
+  sources = [ "contextual_tasks_page_action_controller_interactive_ui_test.cc" ]
+  deps = [
+    ":contextual_tasks",
+    "//chrome/browser/contextual_tasks",
+    "//chrome/browser/ui:ui_features",
+    "//chrome/test:test_support",
+    "//components/contextual_tasks/public",
+    "//testing/gtest",
+  ]
+}
diff --git a/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.cc b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.cc
new file mode 100644
index 0000000..5068fae
--- /dev/null
+++ b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.cc
@@ -0,0 +1,79 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.h"
+
+#include "chrome/browser/contextual_tasks/contextual_tasks_context_controller.h"
+#include "chrome/browser/contextual_tasks/contextual_tasks_context_controller_factory.h"
+#include "chrome/browser/ui/actions/chrome_action_id.h"
+#include "chrome/browser/ui/browser_window/public/browser_window_features.h"
+#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
+#include "chrome/browser/ui/tabs/public/tab_features.h"
+#include "chrome/browser/ui/views/page_action/page_action_controller.h"
+#include "chrome/browser/ui/views/side_panel/side_panel_entry_id.h"
+#include "chrome/browser/ui/views/side_panel/side_panel_entry_key.h"
+#include "chrome/browser/ui/views/side_panel/side_panel_enums.h"
+#include "chrome/browser/ui/views/side_panel/side_panel_ui.h"
+#include "components/contextual_tasks/public/contextual_tasks_service.h"
+#include "components/sessions/content/session_tab_helper.h"
+#include "components/sessions/core/session_id.h"
+#include "components/tabs/public/tab_interface.h"
+
+DEFINE_USER_DATA(ContextualTasksPageActionController);
+
+ContextualTasksPageActionController::ContextualTasksPageActionController(
+    tabs::TabInterface* tab_interface)
+    : tab_interface_(tab_interface),
+      scoped_unowned_user_data_(tab_interface->GetUnownedUserDataHost(),
+                                *this) {
+  Profile* const profile =
+      tab_interface->GetBrowserWindowInterface()->GetProfile();
+  contextual_tasks::ContextualTasksContextController* const context_controller =
+      contextual_tasks::ContextualTasksContextControllerFactory::GetForProfile(
+          profile);
+  contextual_task_observation_.Observe(context_controller);
+}
+
+ContextualTasksPageActionController::~ContextualTasksPageActionController() =
+    default;
+
+// static:
+ContextualTasksPageActionController* ContextualTasksPageActionController::From(
+    tabs::TabInterface* tab_interface) {
+  return Get(tab_interface->GetUnownedUserDataHost());
+}
+
+void ContextualTasksPageActionController::InvokePageAction() {
+  tab_interface_->GetBrowserWindowInterface()
+      ->GetFeatures()
+      .side_panel_ui()
+      ->Toggle(SidePanelEntryKey(SidePanelEntryId::kContextualTasks),
+               SidePanelOpenTrigger::kAppMenu);
+}
+
+void ContextualTasksPageActionController::OnTaskAdded(
+    const contextual_tasks::ContextualTask& task,
+    contextual_tasks::ContextualTasksService::TriggerSource source) {
+  tab_interface_->GetTabFeatures()->page_action_controller()->Show(
+      kActionContextualPanelPageActionChip);
+}
+
+void ContextualTasksPageActionController::OnTaskUpdated(
+    const contextual_tasks::ContextualTask& task,
+    contextual_tasks::ContextualTasksService::TriggerSource source) {
+  OnTaskAdded(task, source);
+}
+
+void ContextualTasksPageActionController::OnTaskRemoved(
+    const base::Uuid& task_id,
+    contextual_tasks::ContextualTasksService::TriggerSource source) {
+  tab_interface_->GetTabFeatures()->page_action_controller()->Hide(
+      kActionContextualPanelPageActionChip);
+}
+
+void ContextualTasksPageActionController::OnWillBeDestroyed() {
+  tab_interface_->GetTabFeatures()->page_action_controller()->Hide(
+      kActionContextualPanelPageActionChip);
+  contextual_task_observation_.Reset();
+}
diff --git a/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.h b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.h
new file mode 100644
index 0000000..7c4741e
--- /dev/null
+++ b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller.h
@@ -0,0 +1,53 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_PAGE_ACTION_CONTROLLER_H_
+#define CHROME_BROWSER_UI_VIEWS_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_PAGE_ACTION_CONTROLLER_H_
+
+#include "base/memory/raw_ptr.h"
+#include "base/scoped_observation.h"
+#include "components/contextual_tasks/public/contextual_tasks_service.h"
+#include "ui/base/unowned_user_data/scoped_unowned_user_data.h"
+
+namespace tabs {
+class TabInterface;
+}  // namespace tabs
+
+// Controller used to trigger the contextual task page action chip to show/hide.
+class ContextualTasksPageActionController
+    : public contextual_tasks::ContextualTasksService::Observer {
+ public:
+  DECLARE_USER_DATA(ContextualTasksPageActionController);
+  explicit ContextualTasksPageActionController(
+      tabs::TabInterface* tab_interface);
+  ~ContextualTasksPageActionController() override;
+
+  static ContextualTasksPageActionController* From(
+      tabs::TabInterface* tab_interface);
+
+  void InvokePageAction();
+
+  void OnTaskAdded(
+      const contextual_tasks::ContextualTask& task,
+      contextual_tasks::ContextualTasksService::TriggerSource source) override;
+  void OnTaskUpdated(
+      const contextual_tasks::ContextualTask& task,
+      contextual_tasks::ContextualTasksService::TriggerSource source) override;
+  void OnTaskRemoved(
+      const base::Uuid& task_id,
+      contextual_tasks::ContextualTasksService::TriggerSource source) override;
+  void OnWillBeDestroyed() override;
+
+ private:
+  raw_ptr<tabs::TabInterface> tab_interface_ = nullptr;
+
+  ui::ScopedUnownedUserData<ContextualTasksPageActionController>
+      scoped_unowned_user_data_;
+
+  base::ScopedObservation<contextual_tasks::ContextualTasksService,
+                          contextual_tasks::ContextualTasksService::Observer>
+      contextual_task_observation_{this};
+};
+
+#endif  // CHROME_BROWSER_UI_VIEWS_CONTEXTUAL_TASKS_CONTEXTUAL_TASKS_PAGE_ACTION_CONTROLLER_H_
diff --git a/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller_interactive_ui_test.cc b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller_interactive_ui_test.cc
new file mode 100644
index 0000000..6dea1ea
--- /dev/null
+++ b/chrome/browser/ui/views/contextual_tasks/contextual_tasks_page_action_controller_interactive_ui_test.cc
@@ -0,0 +1,92 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/contextual_tasks/contextual_tasks_context_controller.h"
+#include "chrome/browser/contextual_tasks/contextual_tasks_context_controller_factory.h"
+#include "chrome/browser/ui/browser_element_identifiers.h"
+#include "chrome/browser/ui/ui_features.h"
+#include "chrome/common/webui_url_constants.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/interaction/interactive_browser_test.h"
+#include "components/contextual_tasks/public/contextual_task.h"
+#include "components/contextual_tasks/public/features.h"
+#include "components/sessions/content/session_tab_helper.h"
+#include "content/public/test/browser_test.h"
+#include "net/dns/mock_host_resolver.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "ui/base/interaction/element_identifier.h"
+
+namespace {
+DEFINE_LOCAL_ELEMENT_IDENTIFIER_VALUE(kFirstTab);
+}  // namespace
+
+class ContextualTasksPageActionControllerInteractiveTest
+    : public InteractiveBrowserTest {
+ public:
+  void SetUp() override {
+    scoped_feature_list_.InitWithFeaturesAndParameters(
+        {{features::kPageActionsMigration, {}},
+         {contextual_tasks::kContextualTasks,
+          {{"ContextualTasksEntryPoint", "page-action-revisit"}}},
+         {features::kTabbedBrowserUseNewLayout, {}}},
+        {});
+    InteractiveBrowserTest::SetUp();
+  }
+  void SetUpOnMainThread() override {
+    InteractiveBrowserTest::SetUpOnMainThread();
+    host_resolver()->AddRule("*", "127.0.0.1");
+    ASSERT_TRUE(embedded_test_server()->Start());
+  }
+
+  GURL GetTestURL() {
+    return embedded_test_server()->GetURL("example.com", "/title1.html");
+  }
+
+  contextual_tasks::ContextualTasksContextController*
+  GetContextualTasksController() {
+    return contextual_tasks::ContextualTasksContextControllerFactory::
+        GetForProfile(browser()->profile());
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(ContextualTasksPageActionControllerInteractiveTest,
+                       ShowContextualTaskPageAction) {
+  RunTestSequence(InstrumentTab(kFirstTab),
+                  EnsureNotPresent(kContextualTasksPageActionElementId),
+                  NavigateWebContents(kFirstTab, GetTestURL()),
+                  Do([&] { GetContextualTasksController()->CreateTask(); }),
+                  WaitForShow(kContextualTasksPageActionElementId));
+}
+
+IN_PROC_BROWSER_TEST_F(ContextualTasksPageActionControllerInteractiveTest,
+                       HideContextualTaskPageAction) {
+  contextual_tasks::ContextualTask task =
+      GetContextualTasksController()->CreateTask();
+  RunTestSequence(
+      InstrumentTab(kFirstTab),
+      WaitForShow(kContextualTasksPageActionElementId),
+      Do([&] { GetContextualTasksController()->DeleteTask(task.GetTaskId()); }),
+      WaitForHide(kContextualTasksPageActionElementId));
+}
+
+IN_PROC_BROWSER_TEST_F(ContextualTasksPageActionControllerInteractiveTest,
+                       ToggleContextualTasksSidePanel) {
+  contextual_tasks::ContextualTask task =
+      GetContextualTasksController()->CreateTask();
+  RunTestSequence(
+      InstrumentTab(kFirstTab),
+      NavigateWebContents(kFirstTab, embedded_test_server()->GetURL(
+                                         "example.com", "/title1.html")),
+      WaitForShow(kContextualTasksPageActionElementId),
+      // Pressing the page action should open the toolbar height side panel
+      PressButton(kContextualTasksPageActionElementId),
+      WaitForShow(kSidePanelElementId),
+      // // Pressing the button again should close the toolbar height side panel
+      PressButton(kContextualTasksPageActionElementId),
+      WaitForHide(kSidePanelElementId));
+}
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
index 4c5c5f3..524770063e 100644
--- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
@@ -46,6 +46,7 @@
 #include "ui/base/mojom/ui_base_types.mojom-shared.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/gfx/geometry/insets.h"
+#include "ui/gfx/image/image_skia.h"
 #include "ui/views/accessibility/view_accessibility.h"
 #include "ui/views/border.h"
 #include "ui/views/bubble/bubble_frame_view.h"
@@ -188,12 +189,6 @@
 BEGIN_METADATA(TitleLabelWrapper)
 END_METADATA
 
-void AddResourceIcon(const gfx::ImageSkia* skia_image, void* data) {
-  views::View* parent = static_cast<views::View*>(data);
-  parent->AddChildView(
-      std::make_unique<RatingStar>(ui::ImageModel::FromImageSkia(*skia_image)));
-}
-
 void ShowExtensionInstallDialogImpl(
     std::unique_ptr<ExtensionInstallPromptShowParams> show_params,
     ExtensionInstallPrompt::DoneCallback done_callback,
@@ -502,7 +497,12 @@
         provider->GetDistanceMetric(views::DISTANCE_RELATED_LABEL_HORIZONTAL)));
     auto rating = std::make_unique<RatingsView>(prompt_->average_rating(),
                                                 prompt_->rating_count());
-    prompt_->AppendRatingStars(AddResourceIcon, rating.get());
+    std::vector<const gfx::ImageSkia*> rating_stars = prompt_->GetRatingStars();
+    for (auto star : rating_stars) {
+      rating->AddChildView(
+          std::make_unique<RatingStar>(ui::ImageModel::FromImageSkia(*star)));
+    }
+
     rating_container->AddChildView(std::move(rating));
     auto rating_count = std::make_unique<RatingLabel>(
         prompt_->GetRatingCount(), views::style::CONTEXT_DIALOG_BODY_TEXT);
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index a2232761..783d865 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -2534,8 +2534,14 @@
       window_management_permission_granted_ =
           status == blink::mojom::PermissionStatus::GRANTED;
     }
+
+    if (borderless_mode_enabled && browser()->app_controller() &&
+        !browser()->app_controller()->UrlMatchesBorderlessPattern(
+            web_contents->GetVisibleURL())) {
+      borderless_mode_enabled = false;
+    }
   } else {
-    // Defaults to the value of borderless_mode_enabled if web contents are
+    // Defaults to the value of `borderless_mode_enabled` if web contents are
     // null. These get overridden when the app is launched and its web contents
     // are ready.
     window_management_permission_granted_ = borderless_mode_enabled;
@@ -4011,6 +4017,7 @@
     case tabs::TabAlert::kVrPresentingInHeadset:
       return IDS_TAB_AX_LABEL_VR_PRESENTING;
     case tabs::TabAlert::kActorAccessing:
+    case tabs::TabAlert::kActorWaitingOnUser:
     case tabs::TabAlert::kGlicAccessing:
 #if BUILDFLAG(ENABLE_GLIC)
       return IDS_TAB_AX_LABEL_GLIC_ACCESSING;
diff --git a/chrome/browser/ui/views/frame/browser_view_ash.cc b/chrome/browser/ui/views/frame/browser_view_ash.cc
index 2c78c20f..9f37da88 100644
--- a/chrome/browser/ui/views/frame/browser_view_ash.cc
+++ b/chrome/browser/ui/views/frame/browser_view_ash.cc
@@ -21,6 +21,10 @@
 #include "ui/gfx/geometry/rounded_corners_f.h"
 #include "ui/views/controls/webview/webview.h"
 
+#if BUILDFLAG(ENABLE_GLIC)
+#include "chrome/browser/glic/browser_ui/context_sharing_border_view.h"
+#endif  // BUILDFLAG(ENABLE_GLIC)
+
 namespace {
 
 void SetRoundedCornersOnHost(views::NativeViewHost* host,
@@ -196,6 +200,13 @@
     contents_webview->SetBackgroundRadii(contents_webview_radii);
   }
 
+#if BUILDFLAG(ENABLE_GLIC)
+  if (auto* glic_border = GetActiveContentsContainerView()->glic_border_view();
+      glic_border) {
+    glic_border->SetRoundedCorners(contents_webview_radii);
+  }
+#endif  // BUILDFLAG(ENABLE_GLIC)
+
   const gfx::RoundedCornersF contents_scrim_radii(
       round_content_webview_top_corner ? window_radii.upper_left() : 0,
       round_content_webview_top_corner ? window_radii.upper_right() : 0,
diff --git a/chrome/browser/ui/views/frame/browser_widget.cc b/chrome/browser/ui/views/frame/browser_widget.cc
index 78e8787..67e932d5 100644
--- a/chrome/browser/ui/views/frame/browser_widget.cc
+++ b/chrome/browser/ui/views/frame/browser_widget.cc
@@ -483,7 +483,11 @@
   // user_color.
   // Device theme retains the user_color from `Widget`.
   if (!theme_service->UsingDeviceTheme()) {
-    if (theme_service->UsingAutogeneratedTheme()) {
+    if (theme_service->UsingPolicyTheme()) {
+      // For policy themes, use the policy color directly since it's not stored
+      // in the autogenerated theme preference.
+      key.user_color = theme_service->GetPolicyThemeColor();
+    } else if (theme_service->UsingAutogeneratedTheme()) {
       key.user_color = theme_service->GetAutogeneratedThemeColor();
     } else if (auto user_color = theme_service->GetUserColor()) {
       key.user_color = user_color;
diff --git a/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.cc b/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.cc
index 8a41f298..8af0962 100644
--- a/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.cc
+++ b/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.cc
@@ -902,10 +902,6 @@
           layout.GetBoundsFor(views().toolbar, browser_view)) {
     return toolbar_rect->bottom() - kConstrainedWindowOverlap;
   }
-  if (const auto webapp_toolbar_rect =
-          layout.GetBoundsFor(views().web_app_frame_toolbar, browser_view)) {
-    return webapp_toolbar_rect->bottom() - kConstrainedWindowOverlap;
-  }
   return kConstrainedWindowOverlap;
 }
 
@@ -918,20 +914,6 @@
   return browser_view->height();
 }
 
-views::Span BrowserViewLayoutImpl::GetDialogHorizontalTarget(
-    const ProposedLayout& layout) const {
-  const auto* const browser_view = views().browser_view.get();
-  views::Span horizontal;
-  if (const auto contents_rect =
-          layout.GetBoundsFor(views().contents_container, browser_view)) {
-    horizontal.set_start(contents_rect->x());
-    horizontal.set_length(contents_rect->width());
-  } else {
-    horizontal.set_end(browser_view->width());
-  }
-  return horizontal;
-}
-
 gfx::Point BrowserViewLayoutImpl::GetDialogPosition(
     const gfx::Size& dialog_size) const {
   const auto params = delegate().GetBrowserLayoutParams();
@@ -939,9 +921,20 @@
     return gfx::Point();
   }
   const ProposedLayout layout = CalculateProposedLayout(params);
-  const auto horizontal = GetDialogHorizontalTarget(layout);
-  return gfx::Point(horizontal.start() + horizontal.length() / 2,
-                    GetDialogTop(layout));
+
+  // Calculate the dialog bounds in browser view space.
+  const int browser_width = params.visual_client_area.width();
+  const int dialog_x =
+      params.visual_client_area.x() + (browser_width - dialog_size.width()) / 2;
+  const int dialog_y = GetDialogTop(layout);
+  gfx::Rect dialog_rect(dialog_x, dialog_y, dialog_size.width(),
+                        dialog_size.height());
+
+  // Convert to widget coordinates.
+  dialog_rect = views().browser_view->ConvertRectToWidget(dialog_rect);
+
+  // TODO: consider whether this should change in RTL?
+  return gfx::Point(dialog_rect.origin());
 }
 
 gfx::Size BrowserViewLayoutImpl::GetMaximumDialogSize() const {
@@ -950,8 +943,10 @@
     return gfx::Size();
   }
   const ProposedLayout layout = CalculateProposedLayout(params);
-  const auto horizontal = GetDialogHorizontalTarget(layout);
+
+  // This computation is irrespective of coordinate system (all coordinates
+  // happen to be in browser view space).
   const int top = GetDialogTop(layout);
   const int bottom = GetDialogBottom(layout);
-  return gfx::Size(horizontal.length(), bottom - top);
+  return gfx::Size(params.visual_client_area.width(), bottom - top);
 }
diff --git a/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.h b/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.h
index 42be525d..924dc13 100644
--- a/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.h
+++ b/chrome/browser/ui/views/frame/layout/browser_view_layout_impl.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_LAYOUT_BROWSER_VIEW_LAYOUT_IMPL_H_
 #define CHROME_BROWSER_UI_VIEWS_FRAME_LAYOUT_BROWSER_VIEW_LAYOUT_IMPL_H_
 
+#include <optional>
 #include <utility>
 
 #include "chrome/browser/ui/views/frame/layout/browser_view_layout.h"
@@ -74,12 +75,15 @@
   };
   TopSeparatorType GetTopSeparatorType() const;
 
+  // Gets the top of the dialog anchoring area, in local coordinates.
+  int GetDialogTop(const ProposedLayout& layout) const;
+
+  // Gets the bottom of the dialog anchoring area, in local coordinates.
+  int GetDialogBottom(const ProposedLayout& layout) const;
+
   // BrowserViewLayout overrides:
   gfx::Point GetDialogPosition(const gfx::Size& dialog_size) const override;
   gfx::Size GetMaximumDialogSize() const override;
-  int GetDialogTop(const ProposedLayout& layout) const;
-  int GetDialogBottom(const ProposedLayout& layout) const;
-  views::Span GetDialogHorizontalTarget(const ProposedLayout& layout) const;
 };
 
 #endif  // CHROME_BROWSER_UI_VIEWS_FRAME_LAYOUT_BROWSER_VIEW_LAYOUT_IMPL_H_
diff --git a/chrome/browser/ui/views/location_bar/find_bar_interactive_ui_tests.cc b/chrome/browser/ui/views/location_bar/find_bar_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ui/views/location_bar/find_bar_interactive_ui_tests.cc
rename to chrome/browser/ui/views/location_bar/find_bar_interactive_uitest.cc
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.cc b/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.cc
index 40460d2..11d3ae2 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.cc
@@ -23,6 +23,8 @@
 #include "components/input/native_web_keyboard_event.h"
 #include "components/zoom/zoom_controller.h"
 #include "content/public/browser/render_widget_host_view.h"
+#include "third_party/blink/public/common/input/web_gesture_event.h"
+#include "third_party/blink/public/common/input/web_input_event.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/mojom/menu_source_type.mojom.h"
 #include "ui/gfx/geometry/rounded_corners_f.h"
@@ -139,5 +141,22 @@
       ->set_omnibox_controller(controller_);
 }
 
+bool OmniboxPopupWebUIBaseContent::PreHandleGestureEvent(
+    content::WebContents* source,
+    const blink::WebGestureEvent& event) {
+  // Block gestures that will zoom on Mac devices (i.e. pinch to zoom
+  // and double tap to zoom)
+#if BUILDFLAG(IS_MAC)
+  if (blink::WebInputEvent::IsPinchGestureEventType(event.GetType())) {
+    return true;
+  }
+
+  if (event.GetType() == blink::WebInputEvent::Type::kGestureDoubleTap) {
+    return true;
+  }
+#endif
+  return false;
+}
+
 BEGIN_METADATA(OmniboxPopupWebUIBaseContent)
 END_METADATA
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.h b/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.h
index dad48cc..a0d15a766 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.h
+++ b/chrome/browser/ui/views/omnibox/omnibox_popup_webui_base_content.h
@@ -62,6 +62,8 @@
                              const gfx::Size& new_size) override;
   bool HandleKeyboardEvent(content::WebContents* source,
                            const input::NativeWebKeyboardEvent& event) override;
+  bool PreHandleGestureEvent(content::WebContents* source,
+                             const blink::WebGestureEvent& event) override;
 
  protected:
   // Set up the WebUI content page and hook up the Omnibox handlers.
diff --git a/chrome/browser/ui/views/page_action/action_ids.h b/chrome/browser/ui/views/page_action/action_ids.h
index 4e2e5b0..cc3636a1 100644
--- a/chrome/browser/ui/views/page_action/action_ids.h
+++ b/chrome/browser/ui/views/page_action/action_ids.h
@@ -15,7 +15,7 @@
 // All ActionIds associated with a page action.
 // For now, the order of the page actions will be based on their position in
 // the array.
-inline constexpr std::array<actions::ActionId, 22> kActionIds = {
+inline constexpr std::array<actions::ActionId, 23> kActionIds = {
     kActionAiMode,
     kActionSidePanelShowLensOverlayResults,
     kActionLensOverlayHomework,
@@ -38,6 +38,7 @@
     kActionVirtualCardEnroll,
     kActionFilledCardInformation,
     kActionShowPaymentsBubbleOrPage,
+    kActionContextualPanelPageActionChip,
 };
 
 static_assert(kActionIds[0] == kActionAiMode,
diff --git a/chrome/browser/ui/views/page_action/page_action_controller.h b/chrome/browser/ui/views/page_action/page_action_controller.h
index 7da5a0f1..16f7799 100644
--- a/chrome/browser/ui/views/page_action/page_action_controller.h
+++ b/chrome/browser/ui/views/page_action/page_action_controller.h
@@ -47,6 +47,14 @@
 class PageActionMetricsRecorderFactory;
 class PageActionMetricsRecorderInterface;
 
+// Indicates the source used to color the page action icon.
+enum class PageActionColorSource {
+  // The foreground's color.
+  kForeground,
+  // A blend between the focus border color and the background.
+  kCascadingAccent,
+};
+
 // Configuration for a page action's suggestion chip.
 struct SuggestionChipConfig {
   // Whether the chip should have expand/collapse animations.
diff --git a/chrome/browser/ui/views/page_action/page_action_icon_controller.cc b/chrome/browser/ui/views/page_action/page_action_icon_controller.cc
index c1eb8cf..0bca892 100644
--- a/chrome/browser/ui/views/page_action/page_action_icon_controller.cc
+++ b/chrome/browser/ui/views/page_action/page_action_icon_controller.cc
@@ -288,6 +288,7 @@
                       params.page_action_icon_delegate));
         break;
       case PageActionIconType::kReadingMode:
+      case PageActionIconType::kContextualSidePanel:
         // Do nothing as this action was added after the migration.
         break;
     }
diff --git a/chrome/browser/ui/views/page_action/page_action_model.cc b/chrome/browser/ui/views/page_action/page_action_model.cc
index a4c1c26..da790df2 100644
--- a/chrome/browser/ui/views/page_action/page_action_model.cc
+++ b/chrome/browser/ui/views/page_action/page_action_model.cc
@@ -165,7 +165,8 @@
 }
 
 PageActionColorSource PageActionModel::GetColorSource() const {
-  return color_source_;
+  return color_source_.has_value() ? *color_source_
+                                   : PageActionColorSource::kForeground;
 }
 
 void PageActionModel::SetOverrideText(
diff --git a/chrome/browser/ui/views/page_action/page_action_model.h b/chrome/browser/ui/views/page_action/page_action_model.h
index 73ecffbb..d78b317 100644
--- a/chrome/browser/ui/views/page_action/page_action_model.h
+++ b/chrome/browser/ui/views/page_action/page_action_model.h
@@ -24,14 +24,7 @@
 struct SuggestionChipConfig;
 class PageActionController;
 class PageActionModelObserver;
-
-// Indicates the source used to color the page action icon.
-enum class PageActionColorSource {
-  // The foreground's color.
-  kForeground,
-  // A blend between the focus border color and the background.
-  kCascadingAccent,
-};
+enum class PageActionColorSource;
 
 // Interface to PageActionModel, used for either the concrete implementation
 // or a mock for testing.
@@ -214,7 +207,7 @@
   ui::ImageModel action_item_image_;
   // When set, it will always take precedence over `action_item_image_`.
   std::optional<ui::ImageModel> override_image_;
-  PageActionColorSource color_source_ = PageActionColorSource::kForeground;
+  std::optional<PageActionColorSource> color_source_;
 
   // When set, it will always take precedence over `text_`.
   std::optional<std::u16string> override_text_;
diff --git a/chrome/browser/ui/views/page_action/page_action_properties_provider.cc b/chrome/browser/ui/views/page_action/page_action_properties_provider.cc
index e8b9e10..360a390 100644
--- a/chrome/browser/ui/views/page_action/page_action_properties_provider.cc
+++ b/chrome/browser/ui/views/page_action/page_action_properties_provider.cc
@@ -200,6 +200,14 @@
                 .type = PageActionIconType::kSaveCard,
             },
         },
+        {
+            kActionContextualPanelPageActionChip,
+            {
+                .histogram_name = "ContextualSidePanel",
+                .type = PageActionIconType::kContextualSidePanel,
+                .element_identifier = kContextualTasksPageActionElementId,
+            },
+        },
     });
 
 constexpr bool CheckIgnoreFlagUsage() {
diff --git a/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc b/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc
rename to chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_uitest.cc
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button_browsertest.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button_browsertest.cc
index c34b5edd..e2cba72 100644
--- a/chrome/browser/ui/views/profiles/avatar_toolbar_button_browsertest.cc
+++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button_browsertest.cc
@@ -50,6 +50,8 @@
 #include "chrome/browser/ui/views/profiles/profile_menu_coordinator.h"
 #include "chrome/browser/ui/views/profiles/profile_menu_view_base.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
+#include "chrome/browser/webauthn/passkey_unlock_manager.h"
+#include "chrome/browser/webauthn/passkey_unlock_manager_factory.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/webui_url_constants.h"
 #include "chrome/grit/branded_strings.h"
@@ -86,9 +88,11 @@
 #include "components/user_education/common/user_education_features.h"
 #include "components/user_education/views/help_bubble_view.h"
 #include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_thread.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/test_launcher.h"
 #include "content/public/test/test_utils.h"
+#include "device/fido/features.h"
 #include "google_apis/gaia/core_account_id.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkColor.h"
@@ -3308,3 +3312,75 @@
   EXPECT_FALSE(WillShowPromo());
 }
 #endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
+
+#if !BUILDFLAG(IS_CHROMEOS)
+class MockPasskeyUnlockManager : public webauthn::PasskeyUnlockManager {
+ public:
+  MOCK_METHOD(bool, ShouldDisplayErrorUi, (), (const, override));
+};
+
+class AvatarToolbarButtonPasskeyUnlockErrorBrowserTest
+    : public AvatarToolbarButtonBrowserTest {
+ public:
+  AvatarToolbarButtonPasskeyUnlockErrorBrowserTest() {
+    scoped_feature_list_.InitWithFeatures(
+        /*enabled_features=*/{device::kPasskeyUnlockErrorUi,
+                              device::kPasskeyUnlockManager,
+                              device::kWebAuthnOpportunisticRetrieval},
+        /*disabled_features=*/{});
+  }
+
+  void SetUpBrowserContextKeyedServices(
+      content::BrowserContext* context) override {
+    AvatarToolbarButtonBrowserTest::SetUpBrowserContextKeyedServices(context);
+    webauthn::PasskeyUnlockManagerFactory::GetInstance()
+        ->SetTestingFactoryAndUse(
+            context, base::BindRepeating(
+                         &AvatarToolbarButtonPasskeyUnlockErrorBrowserTest::
+                             CreateMockPasskeyUnlockManager,
+                         base::Unretained(this)));
+  }
+
+  void TearDownOnMainThread() override {
+    mock_passkey_unlock_manager_ = nullptr;
+    AvatarToolbarButtonBrowserTest::TearDownOnMainThread();
+  }
+
+ protected:
+  MockPasskeyUnlockManager* passkey_unlock_manager() {
+    return mock_passkey_unlock_manager_;
+  }
+
+ private:
+  std::unique_ptr<KeyedService> CreateMockPasskeyUnlockManager(
+      content::BrowserContext* context) {
+    auto passkey_unlock_manager =
+        std::make_unique<testing::NiceMock<MockPasskeyUnlockManager>>();
+    mock_passkey_unlock_manager_ = passkey_unlock_manager.get();
+    ON_CALL(*passkey_unlock_manager, ShouldDisplayErrorUi())
+        .WillByDefault(testing::Return(true));
+    return passkey_unlock_manager;
+  }
+
+  raw_ptr<MockPasskeyUnlockManager> mock_passkey_unlock_manager_ = nullptr;
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(AvatarToolbarButtonPasskeyUnlockErrorBrowserTest,
+                       PasskeyUnlockError) {
+  AvatarToolbarButton* avatar = GetAvatarToolbarButton(browser());
+  SigninWithImageAndClearGreetingAndSyncPromo(avatar, u"test@gmail.com");
+
+  EXPECT_EQ(avatar->GetText(),
+            l10n_util::GetStringUTF16(IDS_AVATAR_BUTTON_PASSKEYS_ERROR_VERIFY));
+
+  // Simulate the error disappearing.
+  ON_CALL(*passkey_unlock_manager(), ShouldDisplayErrorUi())
+      .WillByDefault(testing::Return(false));
+  EXPECT_CALL(*passkey_unlock_manager(), ShouldDisplayErrorUi())
+      .Times(testing::AtLeast(1));
+  passkey_unlock_manager()->NotifyObserversForTesting();
+
+  EXPECT_EQ(avatar->GetText(), std::u16string());
+}
+#endif  // !BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.cc
index 63b716b..e2c9218c 100644
--- a/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.cc
+++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.cc
@@ -51,6 +51,8 @@
 #include "chrome/browser/ui/views/profiles/avatar_toolbar_button.h"
 #include "chrome/browser/ui/views/profiles/profile_menu_coordinator.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
+#include "chrome/browser/webauthn/passkey_unlock_manager.h"
+#include "chrome/browser/webauthn/passkey_unlock_manager_factory.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/grit/branded_strings.h"
 #include "chrome/grit/generated_resources.h"
@@ -888,6 +890,7 @@
         break;
       case ButtonState::kNormal:
       case ButtonState::kManagement:
+      case ButtonState::kPasskeysLockedError:
         CHECK(!collapse_timer_.IsRunning());
         break;
     }
@@ -911,6 +914,7 @@
       case ButtonState::kSigninPending:
       case ButtonState::kSyncPaused:
       case ButtonState::kUpgradeClientError:
+      case ButtonState::kPasskeysLockedError:
       case ButtonState::kPassphraseError:
         break;
     }
@@ -1160,6 +1164,72 @@
 };
 #endif  // BUILDFLAG(ENABLE_DICE_SUPPORT)
 
+// Observes passkey unlock manager to see if the passkeys are locked and the
+// error UI needs to be shown. If passkeys are locked, but could be unlocked, it
+// updates the profile avatar. It also updates the profile avatar after
+// unlocking passkeys.
+class PasskeyStateProvider : public StateProvider,
+                             public webauthn::PasskeyUnlockManager::Observer {
+ public:
+  ~PasskeyStateProvider() override = default;
+
+  explicit PasskeyStateProvider(Profile* profile, StateObserver* state_observer)
+      : StateProvider(profile, state_observer) {
+    passkey_manager_observation_.Observe(
+        webauthn::PasskeyUnlockManagerFactory::GetForProfile(profile));
+  }
+
+  // StateProvider:
+  bool IsActive() const final {
+    return passkey_manager_observation_.GetSource()->ShouldDisplayErrorUi();
+  }
+
+  std::optional<SkColor> GetHighlightColor(
+      const ui::ColorProvider& color_provider) const override {
+    // We use the same colors as the colors of sync errors.
+    return color_provider.GetColor(kColorAvatarButtonHighlightPasskeysLocked);
+  }
+
+  ui::ImageModel GetAvatarIcon(
+      int icon_size,
+      SkColor /*icon_color*/,
+      const ui::ColorProvider& color_provider) const override {
+    return GetAvatarImageWithDottedRing(profile(), color_provider, icon_size);
+  }
+
+  std::u16string GetAvatarTooltipText() const final {
+    // TODO(crbug.com/454658811): Add support for other experiment arms and
+    // check if the tooltip text needs to be updated.
+    return passkey_manager_observation_.GetSource()
+        ->GetPasskeyErrorProfilePillTitle(
+            webauthn::PasskeyUnlockManager::ExperimentArm::kVerify);
+  }
+
+  std::pair<ChromeColorIds, ChromeColorIds> GetInkdropColors() const override {
+    return {kColorToolbarInkDropHover, kColorAvatarButtonNormalRipple};
+  }
+
+  std::u16string GetText() const override {
+    // TODO(crbug.com/454658811): Add support for other experiment arms.
+    return passkey_manager_observation_.GetSource()
+        ->GetPasskeyErrorProfilePillTitle(
+            webauthn::PasskeyUnlockManager::ExperimentArm::kVerify);
+  }
+
+ private:
+  void OnPasskeyUnlockManagerStateChanged() final { RequestUpdate(); }
+
+  void OnPasskeyUnlockManagerShuttingDown() final {
+    passkey_manager_observation_.Reset();
+  }
+
+  void OnPasskeyUnlockManagerIsReady() final { RequestUpdate(); }
+
+  base::ScopedObservation<webauthn::PasskeyUnlockManager,
+                          webauthn::PasskeyUnlockManager::Observer>
+      passkey_manager_observation_{this};
+};
+
 // This provider observes sync errors (including transport mode). It can be
 // configured to listen to a specific error with `sync_error_type`, or to all
 // errors by passing nullopt. That way specific implementations of
@@ -1900,6 +1970,12 @@
             /*state_observer=*/this, &avatar_toolbar_button_.get());
 #endif  // BUILDFLAG(ENABLE_DICE_SUPPORT)
 
+    if (webauthn::PasskeyUnlockManager::IsPasskeyUnlockErrorUiEnabled()) {
+      states_[ButtonState::kPasskeysLockedError] =
+          std::make_unique<PasskeyStateProvider>(profile,
+                                                 /*state_observer=*/this);
+    }
+
     signin::IdentityManager* identity_manager =
         IdentityManagerFactory::GetForProfile(profile);
     scoped_identity_manager_observation_.Observe(identity_manager);
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.h b/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.h
index 0c50d831..bde10fc 100644
--- a/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.h
+++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button_state_manager.h
@@ -160,6 +160,7 @@
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
     kHistorySyncOptin,
 #endif  // BUILDFLAG(ENABLE_DICE_SUPPORT)
+    kPasskeysLockedError,
     // Includes Work and School.
     kManagement,
     kNormal
diff --git a/chrome/browser/ui/views/promos/ios_promo_bubble_browsertest.cc b/chrome/browser/ui/views/promos/ios_promo_bubble_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ui/views/promos/ios_promo_bubble_browsertest.cc
rename to chrome/browser/ui/views/promos/ios_promo_bubble_interactive_uitest.cc
diff --git a/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.cc b/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.cc
index a678d54..3e000856 100644
--- a/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.cc
+++ b/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h"
 
 #include "base/functional/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/glic/public/glic_enabling.h"
 #include "chrome/browser/glic/public/glic_keyed_service.h"
 #include "chrome/browser/glic/public/glic_keyed_service_factory.h"
@@ -17,6 +18,7 @@
 #include "chrome/browser/ui/browser_actions.h"
 #include "chrome/browser/ui/browser_window/public/browser_window_features.h"
 #include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
+#include "chrome/browser/ui/tabs/public/tab_features.h"
 #include "chrome/browser/ui/views/side_panel/side_panel.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_entry.h"
@@ -46,9 +48,6 @@
   if (glic_service->enabling().IsAllowed()) {
     CreateAndRegisterEntry();
   }
-  tab_deactivated_subscription_ =
-      tab_->RegisterWillDeactivate(base::BindRepeating(
-          &GlicSidePanelCoordinator::OnTabDeactivated, base::Unretained(this)));
 }
 
 GlicSidePanelCoordinator::~GlicSidePanelCoordinator() {
@@ -57,6 +56,15 @@
   }
 }
 
+// static
+GlicSidePanelCoordinator* GlicSidePanelCoordinator::GetForTab(
+    tabs::TabInterface* tab) {
+  if (!tab || !tab->GetTabFeatures()) {
+    return nullptr;
+  }
+  return tab->GetTabFeatures()->glic_side_panel_coordinator();
+}
+
 void GlicSidePanelCoordinator::CreateAndRegisterEntry() {
   if (side_panel_registry_->GetEntryForKey(
           SidePanelEntry::Key(SidePanelEntry::Id::kGlic))) {
@@ -117,7 +125,12 @@
     SidePanelEntry* entry,
     SidePanelEntryHideReason reason) {
   CHECK_EQ(entry->key().id(), SidePanelEntry::Id::kGlic);
-  state_ = State::kClosed;
+  if (reason == SidePanelEntryHideReason::kBackgrounded) {
+    state_ = State::kBackgrounded;
+  } else {
+    state_ = State::kClosed;
+  }
+
   NotifyStateChanged();
 }
 
@@ -133,13 +146,6 @@
   NotifyStateChanged();
 }
 
-void GlicSidePanelCoordinator::OnTabDeactivated(tabs::TabInterface* tab) {
-  if (IsShowing()) {
-    state_ = State::kHidden;
-    NotifyStateChanged();
-  }
-}
-
 void GlicSidePanelCoordinator::OnGlicEnabledChanged() {
   // Maybe register side panel entry if not yet registered.
   if (glic::GlicEnabling::IsEnabledForProfile(
diff --git a/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h b/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h
index 9b83d698..eab6c4e 100644
--- a/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h
+++ b/chrome/browser/ui/views/side_panel/glic/glic_side_panel_coordinator.h
@@ -38,6 +38,8 @@
                            SidePanelRegistry* side_panel_registry);
   ~GlicSidePanelCoordinator() override;
 
+  static GlicSidePanelCoordinator* GetForTab(tabs::TabInterface* tab);
+
   // Create and register the Glic side panel entry.
   void CreateAndRegisterEntry();
 
@@ -47,7 +49,7 @@
     kShown,
     // The side panel is in the background, but it will show if its tab becomes
     // active.
-    kHidden,
+    kBackgrounded,
     // The side panel is closed and will only be shown if explicitly requested.
     kClosed,
   };
@@ -61,6 +63,8 @@
   // Returns true if the Glic side panel is currently the active entry.
   bool IsShowing() const;
 
+  State state() { return state_; }
+
   // Registers `callback` to be called when panel visibility is updated.
   base::CallbackListSubscription AddStateCallback(
       base::RepeatingCallback<void(State state)> callback);
@@ -85,7 +89,7 @@
   void OnEntryShown(SidePanelEntry* entry) override;
 
  private:
-  void OnTabDeactivated(tabs::TabInterface* tab);
+  void CheckStateAfterHidden();
 
   // Returns the SidePanelCoordinator for the window associated with `tab_`.
   SidePanelCoordinator* GetWindowSidePanelCoordinator() const;
@@ -100,15 +104,16 @@
   base::WeakPtr<SidePanelEntry> entry_;
   base::CallbackListSubscription on_glic_enabled_changed_subscription_;
   base::RepeatingCallbackList<void(State state)> state_changed_callbacks_;
-  base::CallbackListSubscription tab_deactivated_subscription_;
 
-  State state_ = State::kHidden;
+  State state_ = State::kClosed;
 
   // Tracks the glic container view.
   views::ViewTracker glic_container_tracker_;
 
   // Caches the contents view if it's set before the container is created.
   std::unique_ptr<views::View> contents_view_;
+
+  base::WeakPtrFactory<GlicSidePanelCoordinator> weak_ptr_factory_{this};
 };
 
 }  // namespace glic
diff --git a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc
index fa531ccb..c79799b 100644
--- a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc
+++ b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc
@@ -24,6 +24,7 @@
 #include "chrome/browser/ui/views/side_panel/side_panel_entry_id.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_entry_key.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_entry_waiter.h"
+#include "chrome/browser/ui/views/side_panel/side_panel_enums.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_header.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_header_controller.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_registry.h"
@@ -52,16 +53,12 @@
 
 void SidePanelCoordinator::TearDownPreBrowserWindowDestruction() {
   for (auto panel_type : SidePanelEntry::PanelTypes::All()) {
-    Close(/*suppress_animations=*/true, panel_type);
+    Close(panel_type, SidePanelEntryHideReason::kSidePanelClosed,
+          /*suppress_animations=*/true);
   }
   side_panel_toolbar_pinning_controller_.reset();
 }
 
-void SidePanelCoordinator::Close(SidePanelEntry::PanelType panel_type) {
-  Close(/*suppress_animations=*/false, panel_type,
-        SidePanelEntryHideReason::kSidePanelClosed);
-}
-
 void SidePanelCoordinator::Toggle(
     SidePanelEntryKey key,
     SidePanelUtil::SidePanelOpenTrigger open_trigger) {
@@ -143,10 +140,9 @@
                               ? SidePanelEntry::PanelType::kToolbar
                               : SidePanelEntry::PanelType::kContent;
         IsSidePanelShowing(other_type)) {
-      Close(/*suppress_animations=*/true, other_type,
-            SidePanelEntryHideReason::kSidePanelClosed);
+      Close(other_type, SidePanelEntryHideReason::kSidePanelClosed,
+            /*suppress_animations=*/true);
     }
-
     if (entry->type() == SidePanelEntry::PanelType::kContent) {
       // Record usage for side panel promo.
       feature_engagement::TrackerFactory::GetForBrowserContext(
@@ -215,9 +211,9 @@
 //   (4) At the moment that this comment was written, if this class is showing
 //   a window-scoped side-panel entry, and the window is closed via any
 //   mechanism, this method is not called.
-void SidePanelCoordinator::Close(bool suppress_animations,
-                                 SidePanelEntry::PanelType panel_type,
-                                 SidePanelEntryHideReason reason) {
+void SidePanelCoordinator::Close(SidePanelEntry::PanelType panel_type,
+                                 SidePanelEntryHideReason reason,
+                                 bool suppress_animations) {
   SidePanel* const side_panel = GetSidePanelFor(panel_type);
   if (!IsSidePanelShowing(panel_type) ||
       (!suppress_animations && side_panel->IsClosing())) {
@@ -373,8 +369,8 @@
               content_wrapper->children().front());
           (*active_entry)->CacheView(std::move(current_entry_view));
         }
-        Close(/*suppress_animations=*/true, type,
-              SidePanelEntryHideReason::kBackgrounded);
+        Close(type, SidePanelEntryHideReason::kBackgrounded,
+              /*suppress_animations=*/true);
       }
     } else if (auto active_entry =
                    new_contextual_registry
diff --git a/chrome/browser/ui/views/side_panel/side_panel_coordinator.h b/chrome/browser/ui/views/side_panel/side_panel_coordinator.h
index 1c34b5d2..9c30b1f 100644
--- a/chrome/browser/ui/views/side_panel/side_panel_coordinator.h
+++ b/chrome/browser/ui/views/side_panel/side_panel_coordinator.h
@@ -46,7 +46,10 @@
   void TearDownPreBrowserWindowDestruction();
 
   // SidePanelUI:
-  void Close(SidePanelEntry::PanelType panel_type) override;
+  using SidePanelUI::Close;
+  void Close(SidePanelEntry::PanelType panel_type,
+             SidePanelEntryHideReason reason,
+             bool suppress_animations) override;
   void Toggle(SidePanelEntryKey key,
               SidePanelUtil::SidePanelOpenTrigger open_trigger) override;
   void ShowFrom(SidePanelEntryKey entry_key,
@@ -54,10 +57,6 @@
 
   // SidePanelUIBase:
   using SidePanelUIBase::Show;
-  void Close(bool suppress_animations,
-             SidePanelEntry::PanelType panel_entry,
-             SidePanelEntryHideReason reason =
-                 SidePanelEntryHideReason::kSidePanelClosed) override;
   void Show(const UniqueKey& entry,
             std::optional<SidePanelUtil::SidePanelOpenTrigger> open_trigger,
             bool suppress_animations) override;
diff --git a/chrome/browser/ui/views/side_panel/side_panel_registry.cc b/chrome/browser/ui/views/side_panel/side_panel_registry.cc
index 14a779b0b..276fd399 100644
--- a/chrome/browser/ui/views/side_panel/side_panel_registry.cc
+++ b/chrome/browser/ui/views/side_panel/side_panel_registry.cc
@@ -12,8 +12,9 @@
 #include "chrome/browser/ui/browser_window/public/browser_window_features.h"
 #include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
 #include "chrome/browser/ui/tabs/public/tab_features.h"
-#include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_entry.h"
+#include "chrome/browser/ui/views/side_panel/side_panel_enums.h"
+#include "chrome/browser/ui/views/side_panel/side_panel_ui.h"
 #include "components/tabs/public/tab_interface.h"
 #include "content/public/browser/web_contents.h"
 #include "extensions/common/extension_id.h"
@@ -112,11 +113,15 @@
   // TODO(https://crbug.com/360163254): This is nullptr in
   // BrowserWithTestWindowTest. When the test suite goes away the nullptr check
   // can be removed.
-  if (auto* coordinator = GetCoordinator()) {
-    bool for_tab = get_scope_type() == SidePanelEntryScope::ScopeType::kTab;
+  if (auto* const side_panel_ui =
+          GetBrowserWindowInterface().GetFeatures().side_panel_ui()) {
+    const bool for_tab =
+        get_scope_type() == SidePanelEntryScope::ScopeType::kTab;
     // If the entry with the same key and scope is showing, synchronously close.
-    if (coordinator->IsSidePanelEntryShowing(key, for_tab)) {
-      coordinator->Close(/*suppress_animations=*/true, panel_type);
+    if (side_panel_ui->IsSidePanelEntryShowing(key, for_tab)) {
+      side_panel_ui->Close(panel_type,
+                           SidePanelEntryHideReason::kSidePanelClosed,
+                           /*suppress_animations=*/true);
     }
   }
 
@@ -153,7 +158,3 @@
                     ->GetBrowserWindowInterface()
              : *std::get<BrowserWindowInterface*>(owner_);
 }
-
-SidePanelCoordinator* SidePanelRegistry::GetCoordinator() {
-  return GetBrowserWindowInterface().GetFeatures().side_panel_coordinator();
-}
diff --git a/chrome/browser/ui/views/side_panel/side_panel_registry.h b/chrome/browser/ui/views/side_panel/side_panel_registry.h
index 2bcf1c4..7ab3116 100644
--- a/chrome/browser/ui/views/side_panel/side_panel_registry.h
+++ b/chrome/browser/ui/views/side_panel/side_panel_registry.h
@@ -16,8 +16,6 @@
 #include "chrome/browser/ui/views/side_panel/side_panel_entry_scope.h"
 #include "ui/base/unowned_user_data/scoped_unowned_user_data.h"
 
-class SidePanelCoordinator;
-
 namespace content {
 class WebContents;
 }  // namespace content
@@ -79,8 +77,6 @@
   const BrowserWindowInterface& GetBrowserWindowInterface() const override;
 
  private:
-  SidePanelCoordinator* GetCoordinator();
-
   // The active entry hosted in the side panel used to determine what entry
   // should be visible. This is reset by the coordinator when the panel is
   // closed. When there are multiple registries, this may not be the entry
diff --git a/chrome/browser/ui/views/side_panel/side_panel_ui.h b/chrome/browser/ui/views/side_panel/side_panel_ui.h
index d5a86d7..769bb68 100644
--- a/chrome/browser/ui/views/side_panel/side_panel_ui.h
+++ b/chrome/browser/ui/views/side_panel/side_panel_ui.h
@@ -49,7 +49,12 @@
                         gfx::Rect starting_bounds) = 0;
 
   // Close the side panel.
-  virtual void Close(SidePanelEntry::PanelType panel_type) = 0;
+  virtual void Close(SidePanelEntry::PanelType panel_type,
+                     SidePanelEntryHideReason hide_reason,
+                     bool suppress_animations) = 0;
+  void Close(SidePanelEntry::PanelType panel_type) {
+    Close(panel_type, SidePanelEntryHideReason::kSidePanelClosed, false);
+  }
 
   // Open the side panel for a key. If side panel for the key is already opened
   // then close the side panel.
diff --git a/chrome/browser/ui/views/side_panel/side_panel_ui_base.h b/chrome/browser/ui/views/side_panel/side_panel_ui_base.h
index 0b4d9d3..4d43920 100644
--- a/chrome/browser/ui/views/side_panel/side_panel_ui_base.h
+++ b/chrome/browser/ui/views/side_panel/side_panel_ui_base.h
@@ -100,11 +100,6 @@
     base::RepeatingCallbackList<void()> shown_callback_list;
   };
 
-  virtual void Close(bool suppress_animations,
-                     SidePanelEntry::PanelType panel_type,
-                     SidePanelEntryHideReason reason =
-                         SidePanelEntryHideReason::kSidePanelClosed) = 0;
-
   // This method does not show the side panel. Instead, it queues the side panel
   // to be shown once the contents have been loaded. This process may be either
   // synchronous or asynchronous.
diff --git a/chrome/browser/ui/views/tabs/fade_footer_view.cc b/chrome/browser/ui/views/tabs/fade_footer_view.cc
index d293d33..e7f4ee18 100644
--- a/chrome/browser/ui/views/tabs/fade_footer_view.cc
+++ b/chrome/browser/ui/views/tabs/fade_footer_view.cc
@@ -51,6 +51,7 @@
     case tabs::TabAlert::kTabCapturing:
     case tabs::TabAlert::kPipPlaying:
     case tabs::TabAlert::kActorAccessing:
+    case tabs::TabAlert::kActorWaitingOnUser:
     case tabs::TabAlert::kGlicAccessing:
     case tabs::TabAlert::kGlicSharing:
       icon_color = kColorHoverCardTabAlertPipPlayingIcon;
diff --git a/chrome/browser/ui/views/tabs/glic_button.cc b/chrome/browser/ui/views/tabs/glic_button.cc
index e3d9d112..e28c1d4 100644
--- a/chrome/browser/ui/views/tabs/glic_button.cc
+++ b/chrome/browser/ui/views/tabs/glic_button.cc
@@ -46,6 +46,11 @@
 #include "ui/views/view_class_properties.h"
 
 namespace glic {
+
+// TODO(crbug.com/461326322): Remove this flag when crbug.com/461326322 is
+// resolved.
+BASE_FEATURE(kGlicButtonHideLabelOnTaskNudge, base::FEATURE_ENABLED_BY_DEFAULT);
+
 namespace {
 
 constexpr int kHighlightMargin = 2;
@@ -241,6 +246,10 @@
 }
 
 void GlicButton::ShowDefaultLabel() {
+  if (!base::FeatureList::IsEnabled(kGlicButtonHideLabelOnTaskNudge)) {
+    return;
+  }
+
   is_animating_text_ = true;
   StartSlidingTextAnimation(/*show=*/true);
 
@@ -259,6 +268,10 @@
 }
 
 void GlicButton::SuppressLabel() {
+  if (!base::FeatureList::IsEnabled(kGlicButtonHideLabelOnTaskNudge)) {
+    return;
+  }
+
   StartSlidingTextAnimation(/*show=*/false);
 
   label()->SetPaintToLayer();
diff --git a/chrome/browser/ui/views/web_dialog_view_browsertest.cc b/chrome/browser/ui/views/web_dialog_view_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/ui/views/web_dialog_view_browsertest.cc
rename to chrome/browser/ui/views/web_dialog_view_interactive_uitest.cc
diff --git a/chrome/browser/ui/web_applications/app_browser_controller.cc b/chrome/browser/ui/web_applications/app_browser_controller.cc
index 9fdec0f..1fae67c3 100644
--- a/chrome/browser/ui/web_applications/app_browser_controller.cc
+++ b/chrome/browser/ui/web_applications/app_browser_controller.cc
@@ -453,6 +453,10 @@
   return false;
 }
 
+bool AppBrowserController::UrlMatchesBorderlessPattern(const GURL& url) const {
+  return false;
+}
+
 bool AppBrowserController::AppUsesTabbed() const {
   return false;
 }
diff --git a/chrome/browser/ui/web_applications/app_browser_controller.h b/chrome/browser/ui/web_applications/app_browser_controller.h
index 87921b5..fa165293 100644
--- a/chrome/browser/ui/web_applications/app_browser_controller.h
+++ b/chrome/browser/ui/web_applications/app_browser_controller.h
@@ -49,7 +49,7 @@
 class ColorProvider;
 class ImageModel;
 class ThemeProvider;
-}
+}  // namespace ui
 
 namespace web_app {
 
@@ -237,6 +237,10 @@
   // Returns true when an app's effective display mode is borderless.
   virtual bool AppUsesBorderlessMode() const;
 
+  // Returns true when `url` matches one of the borderless URL patterns of this
+  // app, or when there are no patterns to match.
+  virtual bool UrlMatchesBorderlessPattern(const GURL& url) const;
+
   // Returns true when an app's effective display mode is tabbed.
   virtual bool AppUsesTabbed() const;
 
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.cc b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
index 374959476..d71d356 100644
--- a/chrome/browser/ui/web_applications/web_app_browser_controller.cc
+++ b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/ui/web_applications/web_app_browser_controller.h"
 
+#include <algorithm>
+
 #include "ash/constants/web_app_id_constants.h"
 #include "base/callback_list.h"
 #include "base/check_is_test.h"
@@ -33,6 +35,7 @@
 #include "chrome/browser/web_applications/locks/app_lock.h"
 #include "chrome/browser/web_applications/proto/web_app.pb.h"
 #include "chrome/browser/web_applications/ui_manager/update_dialog_types.h"
+#include "chrome/browser/web_applications/url_pattern_with_regex_matcher.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_filter.h"
@@ -196,6 +199,19 @@
          effective_display_mode_ == DisplayMode::kBorderless;
 }
 
+bool WebAppBrowserController::UrlMatchesBorderlessPattern(
+    const GURL& url) const {
+  const WebApp* app = registrar().GetAppById(app_id());
+  if (app == nullptr) {
+    return false;
+  }
+  return app->borderless_url_patterns().empty() ||
+         std::ranges::any_of(app->borderless_url_patterns(),
+                             [&url](const blink::SafeUrlPattern& p) {
+                               return UrlPatternWithRegexMatcher(p).Match(url);
+                             });
+}
+
 bool WebAppBrowserController::AppUsesTabbed() const {
   if (!base::FeatureList::IsEnabled(blink::features::kDesktopPWAsTabStrip)) {
     return false;
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.h b/chrome/browser/ui/web_applications/web_app_browser_controller.h
index e7b2ec5c..c8d5395 100644
--- a/chrome/browser/ui/web_applications/web_app_browser_controller.h
+++ b/chrome/browser/ui/web_applications/web_app_browser_controller.h
@@ -112,6 +112,7 @@
   void ToggleWindowControlsOverlayEnabled(
       base::OnceClosure on_complete) override;
   bool AppUsesBorderlessMode() const override;
+  bool UrlMatchesBorderlessPattern(const GURL& url) const override;
   bool IsIsolatedWebApp() const override;
   void SetIsolatedWebAppTrueForTesting() override;
   gfx::Rect GetDefaultBounds() const override;
diff --git a/chrome/browser/ui/webui/chrome_web_ui_configs.cc b/chrome/browser/ui/webui/chrome_web_ui_configs.cc
index adfd045..dfcfdb2 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_configs.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_configs.cc
@@ -176,6 +176,10 @@
 #endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) ||
         // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_DESKTOP_ANDROID)
 
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+#include "chrome/browser/ui/webui/updater/updater_ui.h"
+#endif  // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
 #include "chrome/browser/ui/webui/signin/batch_upload_ui.h"
 #include "chrome/browser/ui/webui/signin/dice_web_signin_intercept_ui.h"
@@ -407,6 +411,10 @@
 #endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) ||
         // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_DESKTOP_ANDROID)
 
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+  map.AddWebUIConfig(std::make_unique<UpdaterUIConfig>());
+#endif  // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
   map.AddWebUIConfig(std::make_unique<BatchUploadUIConfig>());
   map.AddWebUIConfig(std::make_unique<DiceWebSigninInterceptUIConfig>());
diff --git a/chrome/browser/ui/webui/settings/people_handler_unittest.cc b/chrome/browser/ui/webui/settings/people_handler_unittest.cc
index 090c36a..de474a1 100644
--- a/chrome/browser/ui/webui/settings/people_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/people_handler_unittest.cc
@@ -50,6 +50,7 @@
 #include "components/signin/public/base/consent_level.h"
 #include "components/signin/public/base/signin_pref_names.h"
 #include "components/signin/public/base/signin_prefs.h"
+#include "components/signin/public/base/signin_switches.h"
 #include "components/signin/public/identity_manager/account_capabilities_test_mutator.h"
 #include "components/signin/public/identity_manager/accounts_mutator.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
@@ -1781,6 +1782,53 @@
       /*`ChromeSigninSettingModification::kToSignin`*/ 2, 1);
 }
 
+class PeopleHandlerUnoBubbleLimitsExperimentTest : public PeopleHandlerTest {
+ private:
+  base::test::ScopedFeatureList feature_list_{
+      switches::kSigninPromoLimitsExperiment};
+};
+
+TEST_F(PeopleHandlerUnoBubbleLimitsExperimentTest,
+       ShouldClearExperimentPrefsWhenExplicitlySettingDontSignin) {
+  base::HistogramTester histogram_tester;
+  // Signed in user can see the setting.
+  AccountInfo account = identity_test_env()->MakePrimaryAccountAvailable(
+      /*email=*/"email@gmail.com", ConsentLevel::kSignin);
+
+  CreatePeopleHandler();
+
+  // Simluates settings page loading.
+  SimulateHandleGetChromeSigninUserChoiceInfo();
+
+  SigninPrefs signin_prefs(*profile()->GetPrefs());
+  ChromeSigninUserChoice current_choice =
+      signin_prefs.GetChromeSigninInterceptionUserChoice(account.gaia);
+
+  // Simulates setting a new value through the UI.
+  ChromeSigninUserChoice user_choice = ChromeSigninUserChoice::kSignin;
+  ASSERT_NE(current_choice, user_choice);
+  SimulateHandleSetChromeSigninUserChoiceInfo(account.email, user_choice);
+
+  // Simulate a last bubble decline time as well.
+  signin_prefs.SetChromeSigninInterceptionLastBubbleDeclineTime(
+      account.gaia, base::Time::Now());
+  signin_prefs.IncrementChromeSigninBubbleRepromptCount(account.gaia);
+
+  // Simulates a second selection within the same settings session.
+  ChromeSigninUserChoice user_choice2 = ChromeSigninUserChoice::kDoNotSignin;
+  ASSERT_NE(current_choice, user_choice2);
+  SimulateHandleSetChromeSigninUserChoiceInfo(account.email, user_choice2);
+  // Explicitly setting the do not sign in option should clear bubble declined
+  // time.
+  EXPECT_FALSE(
+      signin_prefs
+          .GetChromeSigninInterceptionLastBubbleDeclineTime(account.gaia)
+          .has_value());
+  EXPECT_EQ(signin_prefs.GetChromeSigninBubbleRepromptCount(account.gaia), 0);
+
+  DestroyPeopleHandler();
+}
+
 #endif
 
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
diff --git a/chrome/browser/ui/webui/tabs/tabs.mojom b/chrome/browser/ui/webui/tabs/tabs.mojom
index e92cf3b..75754ea8 100644
--- a/chrome/browser/ui/webui/tabs/tabs.mojom
+++ b/chrome/browser/ui/webui/tabs/tabs.mojom
@@ -14,6 +14,7 @@
   kBluetoothScanActive,
   kDesktopCapturing,
   kActorAccessing,
+  kActorWaitingOnUser,
   kGlicAccessing,
   kGlicSharing,
   kHidConnected,
diff --git a/chrome/browser/ui/webui/tabs/tabs_mojom_traits.cc b/chrome/browser/ui/webui/tabs/tabs_mojom_traits.cc
index 5a584f5..cf53d4d 100644
--- a/chrome/browser/ui/webui/tabs/tabs_mojom_traits.cc
+++ b/chrome/browser/ui/webui/tabs/tabs_mojom_traits.cc
@@ -75,6 +75,8 @@
       return MojoTabAlertState::kVideoRecording;
     case mojo::NativeTabAlertState::kActorAccessing:
       return MojoTabAlertState::kActorAccessing;
+    case mojo::NativeTabAlertState::kActorWaitingOnUser:
+      return MojoTabAlertState::kActorWaitingOnUser;
     case NativeTabAlertState::kGlicAccessing:
       return MojoTabAlertState::kGlicAccessing;
     case NativeTabAlertState::kGlicSharing:
@@ -132,6 +134,9 @@
     case MojoTabAlertState::kActorAccessing:
       *out = NativeTabAlertState::kActorAccessing;
       return true;
+    case MojoTabAlertState::kActorWaitingOnUser:
+      *out = NativeTabAlertState::kActorWaitingOnUser;
+      return true;
     case MojoTabAlertState::kGlicAccessing:
       *out = NativeTabAlertState::kGlicAccessing;
       return true;
diff --git a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.cc b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.cc
index 11ee76c..e6f120c 100644
--- a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.cc
+++ b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.cc
@@ -82,6 +82,12 @@
   return nullptr;
 }
 
+bool WebUIContentsWrapper::Host::PreHandleGestureEvent(
+    content::WebContents* source,
+    const blink::WebGestureEvent& event) {
+  return false;
+}
+
 WebUIContentsWrapper::WebUIContentsWrapper(const GURL& webui_url,
                                            Profile* profile,
                                            int task_manager_string_id,
@@ -229,6 +235,12 @@
                : nullptr;
 }
 
+bool WebUIContentsWrapper::PreHandleGestureEvent(
+    content::WebContents* source,
+    const blink::WebGestureEvent& event) {
+  return host_ ? host_->PreHandleGestureEvent(source, event) : false;
+}
+
 void WebUIContentsWrapper::PrimaryPageChanged(content::Page& page) {
   if (webui_resizes_host_) {
     EnableAutoResizeForWebContents(web_contents_.get());
diff --git a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.h b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.h
index 0c1a8b7..b85c1c45 100644
--- a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.h
+++ b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.h
@@ -74,6 +74,8 @@
         const blink::mojom::WindowFeatures& window_features,
         bool user_gesture,
         bool* was_blocked);
+    virtual bool PreHandleGestureEvent(content::WebContents* source,
+                                       const blink::WebGestureEvent& event);
   };
 
   WebUIContentsWrapper(const GURL& webui_url,
@@ -123,6 +125,8 @@
       const blink::mojom::WindowFeatures& window_features,
       bool user_gesture,
       bool* was_blocked) override;
+  bool PreHandleGestureEvent(content::WebContents* source,
+                             const blink::WebGestureEvent& event) override;
 
   // content::WebContentsObserver:
   void PrimaryPageChanged(content::Page& page) override;
diff --git a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper_unittest.cc b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper_unittest.cc
index a7df9eda..8ac44f73 100644
--- a/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper_unittest.cc
+++ b/chrome/browser/ui/webui/top_chrome/webui_contents_wrapper_unittest.cc
@@ -58,6 +58,12 @@
     return nullptr;
   }
 
+  bool PreHandleGestureEvent(content::WebContents* source,
+                             const blink::WebGestureEvent& event) override {
+    ++pre_handle_gesture_event_called_;
+    return true;
+  }
+
   base::WeakPtr<MockHost> GetWeakPtr() {
     return weak_ptr_factory_.GetWeakPtr();
   }
@@ -75,6 +81,10 @@
   }
   int add_new_contents_called() const { return add_new_contents_called_; }
 
+  int pre_handle_gesture_event_called() const {
+    return pre_handle_gesture_event_called_;
+  }
+
  private:
   int show_ui_called_ = 0;
   int close_ui_called_ = 0;
@@ -82,7 +92,7 @@
   int resize_due_to_auto_resize_called_ = 0;
   int draggable_regions_changed_called_ = 0;
   int add_new_contents_called_ = 0;
-
+  int pre_handle_gesture_event_called_ = 0;
   base::WeakPtrFactory<MockHost> weak_ptr_factory_{this};
 };
 
@@ -283,5 +293,27 @@
   EXPECT_EQ(1, host.add_new_contents_called());
 }
 
+TEST_F(WebUIContentsWrapperTest, ForwardsGestureEventsToHost) {
+  MockHost host;
+  EXPECT_EQ(0, host.pre_handle_gesture_event_called());
+
+  contents_wrapper()->SetHost(host.GetWeakPtr());
+
+  blink::WebGestureEvent event(
+      blink::WebInputEvent::Type::kGesturePinchBegin,
+      blink::WebInputEvent::kNoModifiers,
+      blink::WebInputEvent::GetStaticTimeStampForTests());
+
+  EXPECT_TRUE(contents_wrapper()->PreHandleGestureEvent(
+      contents_wrapper()->web_contents(), event));
+  EXPECT_EQ(1, host.pre_handle_gesture_event_called());
+
+  contents_wrapper()->SetHost(nullptr);
+  EXPECT_FALSE(contents_wrapper()->PreHandleGestureEvent(
+      contents_wrapper()->web_contents(), event));
+
+  EXPECT_EQ(1, host.pre_handle_gesture_event_called());
+}
+
 }  // namespace test
 }  // namespace views
diff --git a/chrome/browser/ui/webui/updater/BUILD.gn b/chrome/browser/ui/webui/updater/BUILD.gn
new file mode 100644
index 0000000..08f3345
--- /dev/null
+++ b/chrome/browser/ui/webui/updater/BUILD.gn
@@ -0,0 +1,40 @@
+# Copyright 2025 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+assert(is_mac || is_win)
+
+source_set("updater") {
+  sources = [ "updater_ui.h" ]
+  public_deps = [
+    "//base",
+    "//chrome/browser/notifications/scheduler/public",
+    "//chrome/browser/profiles",
+    "//chrome/common",
+    "//content/public/browser",
+    "//ui/webui",
+  ]
+}
+
+source_set("impl") {
+  sources = [
+    "notifications_internals_ui.cc",
+    "notifications_internals_ui_page_handler.cc",
+  ]
+  public_deps = [
+    ":mojo_bindings",
+    ":notifications_internals",
+    "//base",
+    "//chrome/browser:browser_public_dependencies",
+    "//chrome/browser/notifications/scheduler/public",
+    "//chrome/browser/profiles",
+    "//chrome/browser/resources/notifications_internals:resources_grit",
+    "//content/public/browser",
+    "//ui/webui",
+  ]
+}
+
+mojom("mojo_bindings") {
+  sources = [ "notifications_internals.mojom" ]
+  webui_module_path = "/"
+}
diff --git a/chrome/browser/ui/webui/updater/DIR_METADATA b/chrome/browser/ui/webui/updater/DIR_METADATA
new file mode 100644
index 0000000..086971c
--- /dev/null
+++ b/chrome/browser/ui/webui/updater/DIR_METADATA
@@ -0,0 +1 @@
+mixins: "//chrome/updater/COMMON_METADATA"
\ No newline at end of file
diff --git a/chrome/browser/ui/webui/updater/OWNERS b/chrome/browser/ui/webui/updater/OWNERS
new file mode 100644
index 0000000..a59eee6
--- /dev/null
+++ b/chrome/browser/ui/webui/updater/OWNERS
@@ -0,0 +1,6 @@
+file://chrome/updater/OWNERS
+
+per-file *.mojom=set noparent
+per-file *.mojom=file://ipc/SECURITY_OWNERS
+per-file *_mojom_traits*.*=set noparent
+per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
\ No newline at end of file
diff --git a/chrome/browser/ui/webui/updater/updater_ui.cc b/chrome/browser/ui/webui/updater/updater_ui.cc
new file mode 100644
index 0000000..f801f26
--- /dev/null
+++ b/chrome/browser/ui/webui/updater/updater_ui.cc
@@ -0,0 +1,26 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/webui/updater/updater_ui.h"
+
+#include "chrome/common/webui_url_constants.h"
+#include "chrome/grit/updater_resources.h"
+#include "chrome/grit/updater_resources_map.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_ui.h"
+#include "content/public/browser/web_ui_data_source.h"
+#include "ui/webui/webui_util.h"
+
+UpdaterUI::UpdaterUI(content::WebUI* web_ui)
+    : content::WebUIController(web_ui) {
+  content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
+      web_ui->GetWebContents()->GetBrowserContext(),
+      chrome::kChromeUIUpdaterHost);
+
+  webui::SetupWebUIDataSource(source, kUpdaterResources,
+                              IDR_UPDATER_UPDATER_HTML);
+}
+
+UpdaterUI::~UpdaterUI() = default;
diff --git a/chrome/browser/ui/webui/updater/updater_ui.h b/chrome/browser/ui/webui/updater/updater_ui.h
new file mode 100644
index 0000000..2dc0858
--- /dev/null
+++ b/chrome/browser/ui/webui/updater/updater_ui.h
@@ -0,0 +1,29 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_WEBUI_UPDATER_UPDATER_UI_H_
+#define CHROME_BROWSER_UI_WEBUI_UPDATER_UPDATER_UI_H_
+
+#include "chrome/common/webui_url_constants.h"
+#include "content/public/browser/web_ui_controller.h"
+#include "content/public/browser/webui_config.h"
+#include "content/public/common/url_constants.h"
+
+class UpdaterUI;
+
+class UpdaterUIConfig : public content::DefaultWebUIConfig<UpdaterUI> {
+ public:
+  UpdaterUIConfig()
+      : DefaultWebUIConfig(content::kChromeUIScheme,
+                           chrome::kChromeUIUpdaterHost) {}
+};
+
+// The WebUI for chrome://updater.
+class UpdaterUI : public content::WebUIController {
+ public:
+  explicit UpdaterUI(content::WebUI* web_ui);
+  ~UpdaterUI() override;
+};
+
+#endif  // CHROME_BROWSER_UI_WEBUI_UPDATER_UPDATER_UI_H_
diff --git a/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.cc b/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.cc
index 6e3cf1f..f748c81 100644
--- a/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.cc
+++ b/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.cc
@@ -40,14 +40,9 @@
 
 WebUIBrowserSidePanelUI::~WebUIBrowserSidePanelUI() = default;
 
-void WebUIBrowserSidePanelUI::Close(SidePanelEntry::PanelType panel_type) {
-  Close(/*suppress_animations=*/true, panel_type,
-        SidePanelEntryHideReason::kSidePanelClosed);
-}
-
-void WebUIBrowserSidePanelUI::Close(bool suppress_animations,
-                                    SidePanelEntry::PanelType panel_type,
-                                    SidePanelEntryHideReason reason) {
+void WebUIBrowserSidePanelUI::Close(SidePanelEntry::PanelType panel_type,
+                                    SidePanelEntryHideReason reason,
+                                    bool supress_animations) {
   if (!IsSidePanelShowing(panel_type)) {
     return;
   }
@@ -200,8 +195,8 @@
     current_side_panel_view_.reset();
   }
 
-  Close(/*suppress_animations=*/true, panel_type,
-        SidePanelEntryHideReason::kSidePanelClosed);
+  Close(panel_type, SidePanelEntryHideReason::kSidePanelClosed,
+        /*suppress_animations=*/true);
 }
 
 void WebUIBrowserSidePanelUI::OnSidePanelClosed(
diff --git a/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.h b/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.h
index cc38b98c..ee7eac0 100644
--- a/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.h
+++ b/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.h
@@ -23,7 +23,9 @@
   ~WebUIBrowserSidePanelUI() override;
 
   // SidePanelUI:
-  void Close(SidePanelEntry::PanelType panel_type) override;
+  void Close(SidePanelEntry::PanelType panel_type,
+             SidePanelEntryHideReason reason,
+             bool suppress_animations) override;
   void Toggle(SidePanelEntryKey key,
               SidePanelOpenTrigger open_trigger) override;
   void ShowFrom(SidePanelEntryKey entry_key,
@@ -38,9 +40,6 @@
 
  private:
   // SidePanelUIBase:
-  void Close(bool suppress_animations,
-             SidePanelEntry::PanelType panel_type,
-             SidePanelEntryHideReason reason) override;
   void Show(const UniqueKey& entry,
             std::optional<SidePanelUtil::SidePanelOpenTrigger> open_trigger,
             bool suppress_animations) override;
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index b553553..ca691ae 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -1130,6 +1130,7 @@
     "commands/navigate_and_trigger_install_dialog_command_browsertest.cc",
     "commands/update_protocol_handler_approval_command_browsertest.cc",
     "commands/web_install_from_url_command_browsertest.cc",
+    "isolated_web_apps/borderless_browsertest.cc",
     "isolated_web_apps/commands/garbage_collect_storage_partitions_command_browsertest.cc",
     "isolated_web_apps/commands/get_isolated_web_app_browsing_data_command_browsertest.cc",
     "isolated_web_apps/commands/install_isolated_web_app_from_command_line_browsertest.cc",
diff --git a/chrome/browser/web_applications/chrome_pwa_launcher/chrome_pwa_launcher_main.cc b/chrome/browser/web_applications/chrome_pwa_launcher/chrome_pwa_launcher_main.cc
index afb6868..c2c7c4c 100644
--- a/chrome/browser/web_applications/chrome_pwa_launcher/chrome_pwa_launcher_main.cc
+++ b/chrome/browser/web_applications/chrome_pwa_launcher/chrome_pwa_launcher_main.cc
@@ -6,6 +6,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/path_service.h"
 #include "base/process/launch.h"
 #include "base/win/windows_types.h"
diff --git a/chrome/browser/web_applications/isolated_web_apps/borderless_browsertest.cc b/chrome/browser/web_applications/isolated_web_apps/borderless_browsertest.cc
new file mode 100644
index 0000000..831e42e7
--- /dev/null
+++ b/chrome/browser/web_applications/isolated_web_apps/borderless_browsertest.cc
@@ -0,0 +1,219 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <optional>
+#include <string>
+#include <string_view>
+
+#include "base/check.h"
+#include "base/check_deref.h"
+#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
+#include "chrome/browser/ui/web_applications/app_browser_controller.h"
+#include "chrome/browser/ui/web_applications/test/isolated_web_app_test_utils.h"
+#include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
+#include "chrome/browser/ui/web_applications/web_app_browsertest_base.h"
+#include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h"
+#include "chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "components/content_settings/core/browser/host_content_settings_map.h"
+#include "components/content_settings/core/common/content_settings.h"
+#include "components/content_settings/core/common/content_settings_types.h"
+#include "components/content_settings/core/common/content_settings_types.mojom-data-view.h"
+#include "components/webapps/common/web_app_id.h"
+#include "content/public/common/content_features.h"
+#include "content/public/test/browser_test.h"
+#include "content/public/test/browser_test_utils.h"
+#include "services/network/public/mojom/permissions_policy/permissions_policy_feature.mojom-data-view.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/common/features.h"
+#include "third_party/blink/public/common/safe_url_pattern.h"
+#include "third_party/blink/public/mojom/manifest/display_mode.mojom-data-view.h"
+#include "third_party/liburlpattern/part.h"
+#include "url/gurl.h"
+#include "url/origin.h"
+
+namespace web_app {
+
+namespace {
+
+// The paths to the two pages in the test IWA. See `CreateBorderlessIwaBuilder`.
+constexpr std::string_view kStandalonePagePath = "/standalone-page.html";
+constexpr std::string_view kBorderlessPagePath = "/borderless-page.html";
+
+// The text displayed in the test IWA `message` element to report when it is
+// in borderless display mode. See `CreateBorderlessIwaBuilder` and
+// `ReadAppMessage`.
+constexpr std::string_view kNotBorderlessMessage =
+    "This window is not borderless.";
+constexpr std::string_view kBorderlessMessage = "This window is borderless.";
+
+// Returns a `SafeUrlPattern` that matches the given `pathname`.
+blink::SafeUrlPattern UrlPatternForPath(std::string_view pathname) {
+  liburlpattern::Part part;
+  part.type = liburlpattern::PartType::kFixed;
+  part.value = pathname;
+  blink::SafeUrlPattern pattern;
+  pattern.pathname = {part};
+  return pattern;
+}
+
+IsolatedWebAppBuilder CreateBorderlessIwaBuilder() {
+  constexpr std::string_view kPageHtml = R"(
+    <!doctype html>
+    <html>
+      <head>
+        <link rel="stylesheet" href="/styles.css" />
+      </head>
+      <body>
+        <p id="message">
+          This window is <span class="hide-in-borderless">not</span> borderless.
+        </p>
+      </body>
+    </html>
+    )";
+  return IsolatedWebAppBuilder(
+             ManifestBuilder()
+                 .SetDisplayMode(blink::mojom::DisplayMode::kStandalone)
+                 .SetDisplayModeOverride(
+                     {blink::mojom::DisplayMode::kBorderless})
+                 .AddBorderlessUrlPattern(
+                     UrlPatternForPath(kBorderlessPagePath))
+                 .AddPermissionsPolicy(
+                     network::mojom::PermissionsPolicyFeature::
+                         kWindowManagement,
+                     /*self=*/true, /*origins=*/{}))
+      .AddResource("/styles.css", R"(
+          .hide-in-borderless {
+            display: initial;
+          }
+          @media (display-mode: borderless) {
+            .hide-in-borderless {
+              display: none;
+            }
+          }
+          )",
+                   "text/css")
+      .AddHtml(kStandalonePagePath, kPageHtml)
+      .AddHtml(kBorderlessPagePath, kPageHtml);
+}
+
+content::WebContents& WebContentsOf(Browser& browser) {
+  return CHECK_DEREF(browser.tab_strip_model()->GetActiveWebContents());
+}
+
+blink::mojom::DisplayMode DisplayModeOf(Browser& browser) {
+  auto& web_contents = WebContentsOf(browser);
+  return web_contents.GetDelegate()->GetDisplayMode(&web_contents);
+}
+
+// Reads the inner text of the "message" element. See
+// `CreateBorderlessIwaBuilder`.
+content::EvalJsResult ReadAppMessage(Browser& browser) {
+  return content::EvalJs(
+      &WebContentsOf(browser),
+      "document.getElementById('message').innerText.trim();");
+}
+
+// Sets the `content_type` setting for `origin_url` to the given `setting`.
+void SetContentSetting(
+    Profile* profile,
+    const GURL& origin_url,
+    content_settings::mojom::ContentSettingsType content_type,
+    ContentSetting setting) {
+  CHECK_DEREF(HostContentSettingsMapFactory::GetForProfile(profile))
+      .SetContentSettingDefaultScope(/*primary_url=*/origin_url,
+                                     /*secondary_url=*/origin_url, content_type,
+                                     setting);
+}
+
+}  // namespace
+
+class BorderlessBrowserTest : public WebAppBrowserTestBase {
+ public:
+  BorderlessBrowserTest()
+      : WebAppBrowserTestBase(
+            {features::kIsolatedWebApps, blink::features::kWebAppBorderless},
+            {}) {}
+
+ protected:
+  void SetUpOnMainThread() override {
+    WebAppBrowserTestBase::SetUpOnMainThread();
+    app_url_info_ =
+        CreateBorderlessIwaBuilder().BuildBundle()->InstallChecked(profile());
+  }
+
+  Browser& LaunchAppInPathAndWait(std::string_view url_path) {
+    Browser& browser =
+        CHECK_DEREF(LaunchWebAppToURL(profile(), app_url_info_->app_id(),
+                                      app_origin_url().Resolve(url_path)));
+    CHECK(content::WaitForLoadStop(&WebContentsOf(browser)));
+    return browser;
+  }
+
+  bool NavigateToAppPathAndWait(Browser& browser, std::string_view url_path) {
+    return ui_test_utils::NavigateToURL(&browser,
+                                        app_origin_url().Resolve(url_path)) &&
+           content::WaitForLoadStop(&WebContentsOf(browser));
+  }
+
+  void SetAppWindowManagementPermission(ContentSetting setting) {
+    SetContentSetting(profile(), app_origin_url(),
+                      ContentSettingsType::WINDOW_MANAGEMENT, setting);
+  }
+
+ private:
+  GURL app_origin_url() const { return app_url_info_->origin().GetURL(); }
+
+  // Not null after the IWA is installed in `SetUpOnMainThread`.
+  std::optional<IsolatedWebAppUrlInfo> app_url_info_;
+};
+
+IN_PROC_BROWSER_TEST_F(BorderlessBrowserTest, AppCanCreateStandaloneWindow) {
+  SetAppWindowManagementPermission(CONTENT_SETTING_ALLOW);
+
+  Browser& browser = LaunchAppInPathAndWait(kStandalonePagePath);
+  EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kStandalone);
+  EXPECT_EQ(ReadAppMessage(browser), kNotBorderlessMessage);
+}
+
+IN_PROC_BROWSER_TEST_F(BorderlessBrowserTest, AppCanCreateBorderlessWindow) {
+  SetAppWindowManagementPermission(CONTENT_SETTING_ALLOW);
+
+  Browser& browser = LaunchAppInPathAndWait(kBorderlessPagePath);
+  EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kBorderless);
+  EXPECT_EQ(ReadAppMessage(browser), kBorderlessMessage);
+}
+
+IN_PROC_BROWSER_TEST_F(BorderlessBrowserTest,
+                       DisplayModeDoesNotChangeOnNavigation) {
+  SetAppWindowManagementPermission(CONTENT_SETTING_ALLOW);
+
+  {
+    Browser& browser = LaunchAppInPathAndWait(kStandalonePagePath);
+    EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kStandalone);
+
+    EXPECT_TRUE(NavigateToAppPathAndWait(browser, kBorderlessPagePath));
+    EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kStandalone);
+  }
+
+  {
+    Browser& browser = LaunchAppInPathAndWait(kBorderlessPagePath);
+    EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kBorderless);
+
+    EXPECT_TRUE(NavigateToAppPathAndWait(browser, kStandalonePagePath));
+    EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kBorderless);
+  }
+}
+
+IN_PROC_BROWSER_TEST_F(BorderlessBrowserTest,
+                       AppCannotCreateBorderlessWindowWithoutPermission) {
+  SetAppWindowManagementPermission(CONTENT_SETTING_BLOCK);
+
+  Browser& browser = LaunchAppInPathAndWait(kBorderlessPagePath);
+  EXPECT_EQ(DisplayModeOf(browser), blink::mojom::DisplayMode::kStandalone);
+  EXPECT_EQ(ReadAppMessage(browser), kNotBorderlessMessage);
+}
+
+}  // namespace web_app
diff --git a/chrome/browser/webapps/web_app_offline_browsertest.cc b/chrome/browser/webapps/web_app_offline_interactive_uitest.cc
similarity index 100%
rename from chrome/browser/webapps/web_app_offline_browsertest.cc
rename to chrome/browser/webapps/web_app_offline_interactive_uitest.cc
diff --git a/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc b/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc
index 78a00b9..6070793 100644
--- a/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc
+++ b/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 #include <iterator>
 #include <memory>
+#include <optional>
 #include <vector>
 
 #include "base/functional/callback.h"
@@ -88,7 +89,8 @@
             PasskeyCredential::UserId(credential.user.id),
             PasskeyCredential::Username(credential.user.name.value_or("")),
             PasskeyCredential::DisplayName(
-                credential.user.display_name.value_or("")));
+                credential.user.display_name.value_or("")),
+            /*creation_time=*/std::nullopt, credential.last_used_time);
       });
 
   bool is_immediate = false;
diff --git a/chrome/browser/webauthn/passkey_unlock_manager.cc b/chrome/browser/webauthn/passkey_unlock_manager.cc
index 110a8b3f..308369c8 100644
--- a/chrome/browser/webauthn/passkey_unlock_manager.cc
+++ b/chrome/browser/webauthn/passkey_unlock_manager.cc
@@ -17,6 +17,7 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/sync/service/sync_service.h"
 #include "components/sync/service/sync_user_settings.h"
+#include "device/fido/features.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "ui/base/l10n/l10n_util.h"
 
@@ -56,7 +57,7 @@
   observer_list_.RemoveObserver(observer);
 }
 
-bool PasskeyUnlockManager::ShouldDisplayErrorUi() {
+bool PasskeyUnlockManager::ShouldDisplayErrorUi() const {
   return ArePasskeysLocked() && ArePasskeysUnlockable();
 }
 
@@ -67,7 +68,7 @@
 }
 
 std::u16string PasskeyUnlockManager::GetPasskeyErrorProfilePillTitle(
-    ExperimentArm experiment_arm) {
+    ExperimentArm experiment_arm) const {
   switch (experiment_arm) {
     case ExperimentArm::kUnlock:
       return l10n_util::GetStringUTF16(IDS_AVATAR_BUTTON_PASSKEYS_ERROR_UNLOCK);
@@ -108,6 +109,17 @@
   }
 }
 
+// static
+bool PasskeyUnlockManager::IsPasskeyUnlockErrorUiEnabled() {
+  return base::FeatureList::IsEnabled(device::kPasskeyUnlockErrorUi) &&
+         base::FeatureList::IsEnabled(device::kPasskeyUnlockManager) &&
+         base::FeatureList::IsEnabled(device::kWebAuthnOpportunisticRetrieval);
+}
+
+void PasskeyUnlockManager::NotifyObserversForTesting() {
+  NotifyObservers();
+}
+
 PasskeyModel* PasskeyUnlockManager::passkey_model() {
   return passkey_model_observation_.GetSource();
 }
@@ -168,12 +180,12 @@
                                base::Minutes(4));
 }
 
-bool PasskeyUnlockManager::ArePasskeysLocked() {
+bool PasskeyUnlockManager::ArePasskeysLocked() const {
   // TODO(crbug.com/450238902): Also check enclave manager readiness.
   return has_passkeys_.value_or(false) && sync_active_;
 }
 
-bool PasskeyUnlockManager::ArePasskeysUnlockable() {
+bool PasskeyUnlockManager::ArePasskeysUnlockable() const {
   // TODO(crbug.com/450238902): Also check GPM PIN availability.
   // TODO(crbug.com/450551870): Check for more verification methods.
   return has_system_uv_.value_or(false);
@@ -183,6 +195,7 @@
   for (Observer& observer : observer_list_) {
     observer.OnPasskeyUnlockManagerShuttingDown();
   }
+  enclave_manager_observation_.Reset();
   passkey_model_observation_.Reset();
   sync_service_observation_.Reset();
 }
@@ -218,4 +231,6 @@
   NOTREACHED();
 }
 
+PasskeyUnlockManager::PasskeyUnlockManager() = default;
+
 }  // namespace webauthn
diff --git a/chrome/browser/webauthn/passkey_unlock_manager.h b/chrome/browser/webauthn/passkey_unlock_manager.h
index 5a8f6f8..142d2d3 100644
--- a/chrome/browser/webauthn/passkey_unlock_manager.h
+++ b/chrome/browser/webauthn/passkey_unlock_manager.h
@@ -59,18 +59,26 @@
   void RemoveObserver(Observer* observer);
 
   // Synchronously tells whether the passkey error UI should be displayed.
-  bool ShouldDisplayErrorUi();
+  virtual bool ShouldDisplayErrorUi() const;
 
   // Opens a browser tab with a challenge for unlocking passkeys.
   static void OpenTabWithPasskeyUnlockChallenge(Browser* browser);
 
   // Methods providing the UI strings depending on the experiment arms.
-  std::u16string GetPasskeyErrorProfilePillTitle(ExperimentArm experiment_arm);
+  std::u16string GetPasskeyErrorProfilePillTitle(
+      ExperimentArm experiment_arm) const;
   std::u16string GetPasskeyErrorProfileMenuDetails(
       ExperimentArm experiment_arm);
   std::u16string GetPasskeyErrorProfileMenuButtonLabel(
       ExperimentArm experiment_arm);
 
+  // Returns true if the passkey unlock error UI is enabled, depending on the
+  // feature flags.
+  static bool IsPasskeyUnlockErrorUiEnabled();
+
+  // Used in tests to notify observers.
+  void NotifyObserversForTesting();
+
  private:
   // Returns the PasskeyModel associated with the profile passed to the
   // constructor.
@@ -104,8 +112,8 @@
   void AsynchronouslyLoadEnclaveManager();
 
   // Helpers for ShouldDisplayErrorUi().
-  bool ArePasskeysLocked();
-  bool ArePasskeysUnlockable();
+  bool ArePasskeysLocked() const;
+  bool ArePasskeysUnlockable() const;
 
   void Shutdown() override;
 
@@ -142,6 +150,9 @@
   base::ScopedObservation<syncer::SyncService, syncer::SyncServiceObserver>
       sync_service_observation_{this};
   base::WeakPtrFactory<PasskeyUnlockManager> weak_ptr_factory_{this};
+
+ protected:
+  PasskeyUnlockManager();
 };
 
 }  // namespace webauthn
diff --git a/chrome/browser/win/registry_watcher.cc b/chrome/browser/win/registry_watcher.cc
index 4fc6f4d..6456d610 100644
--- a/chrome/browser/win/registry_watcher.cc
+++ b/chrome/browser/win/registry_watcher.cc
@@ -43,6 +43,10 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
+size_t RegistryWatcher::GetRegistryKeyCount() const {
+  return registry_key_watchers_.size();
+}
+
 void RegistryWatcher::OnRegistryKeyChanged() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // Stop watching all other keys to prevent multiple callbacks.
diff --git a/chrome/browser/win/registry_watcher.h b/chrome/browser/win/registry_watcher.h
index 91027006..2f44bbde 100644
--- a/chrome/browser/win/registry_watcher.h
+++ b/chrome/browser/win/registry_watcher.h
@@ -31,6 +31,9 @@
   RegistryWatcher(const RegistryWatcher&) = delete;
   RegistryWatcher& operator=(const RegistryWatcher&) = delete;
 
+  // Returns the number of key that this watcher is watching.
+  size_t GetRegistryKeyCount() const;
+
  private:
   // Called when a change is detected on one of the registry keys.
   void OnRegistryKeyChanged();
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt
index 5417537..b9e381d17 100644
--- a/chrome/build/android-arm64.pgo.txt
+++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@
-chrome-android64-main-1763470123-f048c06668aef1168aca7d5a5575909b7f8e665a-39b5df2f39cbf6807a5166a4f611ab7a46173196.profdata
+chrome-android64-main-1763485202-05e427c6c72c3920a3b5a1ba528568dfdda354ff-ba8d08d441a2e633ecb88a6653b787175282fdda.profdata
diff --git a/chrome/build/android-desktop-x64.pgo.txt b/chrome/build/android-desktop-x64.pgo.txt
index 2113709..4890b73 100644
--- a/chrome/build/android-desktop-x64.pgo.txt
+++ b/chrome/build/android-desktop-x64.pgo.txt
@@ -1 +1 @@
-chrome-android-desktop-x64-main-1763466677-7d2954d6734797cb45b93ba7d7568d0456bdaa15-2cf8c35edcf6e5a45c2a819b286068020e281346.profdata
+chrome-android-desktop-x64-main-1763488604-2dc004c3eca9911a50f960f970c0fac4f50974d6-fbd9850b484fe65c7105cb3d13c3279cf101f0c6.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index db06983..1517763 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1763474335-426784be7994de098bb66bb8bca0acd9ef355598-d873d5f11b751ec1a7d73490ba25ac1662c5b794.profdata
+chrome-mac-arm-main-1763495877-2bde383f2c64a521c3b6a4137c20b44d50806df7-f625369620654e6a87673b4e9922308d1fd58fd5.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index a6c9e56..9db80cc 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1763466677-656730b9ff572e64cbd3fb6b4e02c6f594d94735-2cf8c35edcf6e5a45c2a819b286068020e281346.profdata
+chrome-mac-main-1763488604-1e1e0f4d8a490180362a8e60b59b8c6a3f73efce-fbd9850b484fe65c7105cb3d13c3279cf101f0c6.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt
index 48b1cf9f..e07aefe6 100644
--- a/chrome/build/win-arm64.pgo.txt
+++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@
-chrome-win-arm64-main-1763466677-63f19c5715cbf6a866fdd293ff68b444a3e0ef0a-2cf8c35edcf6e5a45c2a819b286068020e281346.profdata
+chrome-win-arm64-main-1763488604-f0c4aa8c715b203c424b01c20e926d91fc4f9706-fbd9850b484fe65c7105cb3d13c3279cf101f0c6.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 0e23389c..9c62ad6 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1763445472-8f0a03ec381c3ce4495ca97a5ac08281201d07d6-60b30f893095f724fcd1d93c0c696d5a7c44f33f.profdata
+chrome-win32-main-1763466677-3230553a7d6fe6bbc1d515c1221bc34ca468392b-2cf8c35edcf6e5a45c2a819b286068020e281346.profdata
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni
index 820db50..29239d42 100644
--- a/chrome/chrome_paks.gni
+++ b/chrome/chrome_paks.gni
@@ -598,6 +598,11 @@
         "//ui/webui/resources:code_cache_resources",
       ]
     }
+
+    if (is_mac || is_win) {
+      sources += [ "$root_gen_dir/chrome/updater_resources.pak" ]
+      deps += [ "//chrome/browser/resources/updater:resources" ]
+    }
   }
 }
 
diff --git a/chrome/chrome_proxy/chrome_proxy_main_win.cc b/chrome/chrome_proxy/chrome_proxy_main_win.cc
index 96b9fa0..4fcbf22 100644
--- a/chrome/chrome_proxy/chrome_proxy_main_win.cc
+++ b/chrome/chrome_proxy/chrome_proxy_main_win.cc
@@ -7,6 +7,7 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/path_service.h"
 #include "base/process/launch.h"
 #include "chrome/common/chrome_switches.h"
diff --git a/chrome/common/extensions/api/_api_features.json b/chrome/common/extensions/api/_api_features.json
index 419e73ce..d673386 100644
--- a/chrome/common/extensions/api/_api_features.json
+++ b/chrome/common/extensions/api/_api_features.json
@@ -704,6 +704,13 @@
       "ECD28F2B60BDB3B4E566D6C60BD88BE0774044C1",  // b/314208017
       "C03440D5E6161ED58738ABA11586B1DB4B4DCA8A"  // b/379564028#comment27
     ]
+  }, {
+    "channel": "stable",
+    "contexts": ["webui_untrusted"],
+    "dependencies": [],
+    "matches": [
+      "chrome-untrusted://class-tools-remote-display/*"
+    ]
   }],
   "loginScreenStorage": {
     "dependencies": ["permission:loginScreenStorage"],
diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc
index 245fe091..2e7ae1d3 100644
--- a/chrome/common/logging_chrome.cc
+++ b/chrome/common/logging_chrome.cc
@@ -23,6 +23,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/functional/bind.h"
+#include "base/logging.h"
 #include "base/metrics/statistics_recorder.h"
 #include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/common/logging_chrome.h b/chrome/common/logging_chrome.h
index 68657a3..1bb3aeb 100644
--- a/chrome/common/logging_chrome.h
+++ b/chrome/common/logging_chrome.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_COMMON_LOGGING_CHROME_H_
 #define CHROME_COMMON_LOGGING_CHROME_H_
 
-#include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
index b497a43..f96fccf 100644
--- a/chrome/common/webui_url_constants.cc
+++ b/chrome/common/webui_url_constants.cc
@@ -137,6 +137,9 @@
       kChromeUITermsHost,
 #endif
       kChromeUITranslateInternalsHost,
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
+      kChromeUIUpdaterHost,
+#endif
       kChromeUIUsbInternalsHost,
       kChromeUIUserActionsHost,
       kChromeUIVersionHost,
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
index 6aa00c2..7deddf39 100644
--- a/chrome/common/webui_url_constants.h
+++ b/chrome/common/webui_url_constants.h
@@ -612,6 +612,11 @@
     "chrome://history-sync-optin/";
 #endif
 
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
+inline constexpr char kChromeUIUpdaterHost[] = "updater";
+inline constexpr char kChromeUIUpdaterURL[] = "chrome://updater/";
+#endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
+
 #if ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && \
      defined(TOOLKIT_VIEWS)) ||                         \
     defined(USE_AURA)
diff --git a/chrome/credential_provider/extension/extension_main.cc b/chrome/credential_provider/extension/extension_main.cc
index b5cbed9c..09f8202 100644
--- a/chrome/credential_provider/extension/extension_main.cc
+++ b/chrome/credential_provider/extension/extension_main.cc
@@ -6,6 +6,7 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/process/memory.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/win/process_startup_helper.h"
diff --git a/chrome/credential_provider/gaiacp/gaia_credential_provider_module.cc b/chrome/credential_provider/gaiacp/gaia_credential_provider_module.cc
index f410da9c..2091ffa0 100644
--- a/chrome/credential_provider/gaiacp/gaia_credential_provider_module.cc
+++ b/chrome/credential_provider/gaiacp/gaia_credential_provider_module.cc
@@ -9,6 +9,7 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/strings/string_util.h"
 #include "base/win/win_util.h"
 #include "base/win/windows_version.h"
diff --git a/chrome/credential_provider/setup/setup.cc b/chrome/credential_provider/setup/setup.cc
index 729ba14a..d1c1d7ea 100644
--- a/chrome/credential_provider/setup/setup.cc
+++ b/chrome/credential_provider/setup/setup.cc
@@ -19,6 +19,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/process/memory.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/enterprise_companion/enterprise_companion.cc b/chrome/enterprise_companion/enterprise_companion.cc
index 3d4c63b..a543dba 100644
--- a/chrome/enterprise_companion/enterprise_companion.cc
+++ b/chrome/enterprise_companion/enterprise_companion.cc
@@ -14,6 +14,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/process/memory.h"
 #include "base/process/process_handle.h"
diff --git a/chrome/enterprise_companion/test/run_all_integration_tests.cc b/chrome/enterprise_companion/test/run_all_integration_tests.cc
index 72a1f46..177f914 100644
--- a/chrome/enterprise_companion/test/run_all_integration_tests.cc
+++ b/chrome/enterprise_companion/test/run_all_integration_tests.cc
@@ -8,6 +8,7 @@
 #include "base/compiler_specific.h"
 #include "base/functional/bind.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
 #include "build/build_config.h"
diff --git a/chrome/enterprise_companion/test/run_all_unittests.cc b/chrome/enterprise_companion/test/run_all_unittests.cc
index c453e67..5fcbb496 100644
--- a/chrome/enterprise_companion/test/run_all_unittests.cc
+++ b/chrome/enterprise_companion/test/run_all_unittests.cc
@@ -4,6 +4,7 @@
 
 #include "base/functional/bind.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
 
diff --git a/chrome/enterprise_companion/test/test_crashpad_embedder.cc b/chrome/enterprise_companion/test/test_crashpad_embedder.cc
index 29d3982e..91a7c21 100644
--- a/chrome/enterprise_companion/test/test_crashpad_embedder.cc
+++ b/chrome/enterprise_companion/test/test_crashpad_embedder.cc
@@ -6,6 +6,7 @@
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/notreached.h"
 #include "build/build_config.h"
 #include "chrome/enterprise_companion/crash_client.h"
diff --git a/chrome/installer/gcapi/gcapi_dll.cc b/chrome/installer/gcapi/gcapi_dll.cc
index 9174bee..fc849346 100644
--- a/chrome/installer/gcapi/gcapi_dll.cc
+++ b/chrome/installer/gcapi/gcapi_dll.cc
@@ -7,6 +7,7 @@
 #include "base/at_exit.h"
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 
 // Visual Studio needs at least one C++ file in project http://goo.gl/roro9
 
diff --git a/chrome/installer/util/logging_installer.cc b/chrome/installer/util/logging_installer.cc
index 274f2c3..4734595 100644
--- a/chrome/installer/util/logging_installer.cc
+++ b/chrome/installer/util/logging_installer.cc
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-
 #include "chrome/installer/util/logging_installer.h"
 
 #include <windows.h>
@@ -19,6 +18,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/logging_win.h"
 #include "base/path_service.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/renderer/accessibility/read_anything/read_anything_app_controller_browsertest.cc b/chrome/renderer/accessibility/read_anything/read_anything_app_controller_browsertest.cc
index 8f00ff2..776e5ec 100644
--- a/chrome/renderer/accessibility/read_anything/read_anything_app_controller_browsertest.cc
+++ b/chrome/renderer/accessibility/read_anything/read_anything_app_controller_browsertest.cc
@@ -2713,24 +2713,6 @@
 }
 
 TEST_F(ReadAnythingAppControllerTest,
-       GetCurrentText_SuperscriptCombinedWithCurrentSegment) {
-  std::u16string sentence1 = u"And I am almost there.";
-  std::u16string sentence2 = u"2";
-  ui::AXNodeData static_text1 = test::TextNode(kId1, sentence1);
-  ui::AXNodeData static_text2 = test::SuperscriptNode(kId2, sentence2);
-
-  SendUpdateAndDistillNodes({std::move(static_text1), std::move(static_text2)});
-
-  std::vector<ReadAloudTextSegment> next_segments = GetCurrentTextSegments();
-
-  ExpectNodesMapToEntireText(next_segments, {kId1, kId2},
-                             {sentence1, sentence2});
-
-  // Nodes are empty at the end of the new tree.
-  MoveToNextAndAssertEmpty();
-}
-
-TEST_F(ReadAnythingAppControllerTest,
        GetCurrentText_SuperscriptWithBracketsCombinedWithCurrentSegment) {
   std::u16string sentence1 = u"And I am almost there.";
   std::u16string sentence2 = u"[2]";
@@ -3065,6 +3047,24 @@
 };
 
 TEST_F(ReadAnythingAppControllerV8SegmentationTest,
+       GetCurrentText_SuperscriptCombinedWithCurrentSegment) {
+  std::u16string sentence1 = u"And I am almost there.";
+  std::u16string sentence2 = u"2";
+  ui::AXNodeData static_text1 = test::TextNode(kId1, sentence1);
+  ui::AXNodeData static_text2 = test::SuperscriptNode(kId2, sentence2);
+
+  SendUpdateAndDistillNodes({std::move(static_text1), std::move(static_text2)});
+
+  std::vector<ReadAloudTextSegment> next_segments = GetCurrentTextSegments();
+
+  ExpectNodesMapToEntireText(next_segments, {kId1, kId2},
+                             {sentence1, sentence2});
+
+  // Nodes are empty at the end of the new tree.
+  MoveToNextAndAssertEmpty();
+}
+
+TEST_F(ReadAnythingAppControllerV8SegmentationTest,
        GetCurrentText_IncludesListMarkers) {
   // Simulate breaking up the brackets across a link.
   std::string marker_html_tag = "::marker";
diff --git a/chrome/renderer/accessibility/read_anything/read_anything_app_model.cc b/chrome/renderer/accessibility/read_anything/read_anything_app_model.cc
index 0716040..8156634f 100644
--- a/chrome/renderer/accessibility/read_anything/read_anything_app_model.cc
+++ b/chrome/renderer/accessibility/read_anything/read_anything_app_model.cc
@@ -1033,6 +1033,7 @@
       case ui::AXEventGenerator::Event::CHECKED_STATE_DESCRIPTION_CHANGED:
       case ui::AXEventGenerator::Event::CHILDREN_CHANGED:
       case ui::AXEventGenerator::Event::CONTROLS_CHANGED:
+      case ui::AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED:
       case ui::AXEventGenerator::Event::DETAILS_CHANGED:
       case ui::AXEventGenerator::Event::DESCRIBED_BY_CHANGED:
       case ui::AXEventGenerator::Event::DESCRIPTION_CHANGED:
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 04a4c1c..1b40ed7 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4469,7 +4469,10 @@
         "../browser/invalidation/profile_invalidation_provider_factory_browsertest.cc",
         "../browser/net/nss_context_chromeos_browsertest.cc",
       ]
-      deps += [ "//chrome/browser/ui/download" ]
+      deps += [
+        "//chrome/browser/default_browser:browser_tests",
+        "//chrome/browser/ui/download",
+      ]
     }
 
     if (include_js_tests) {
@@ -6246,6 +6249,7 @@
     args += [ "--chromium-output-directory=@WrappedPath(.)" ]
 
     data_deps += [
+      "//base:base_perftests",
       "//components:components_perftests",
       "//testing:run_perf_test",
       "//third_party/dawn/src/tint/cmd/bench:bench_cmd",
@@ -6253,7 +6257,6 @@
 
     if (!is_android) {
       data_deps += [
-        "//base:base_perftests",
         "//chrome/test:load_library_perf_tests",
         "//components/tracing:tracing_perftests",
         "//testing:run_perf_test",
@@ -6477,6 +6480,7 @@
     "../browser/enterprise/reporting/report_generator_unittest.cc",
     "../browser/enterprise/reporting/report_request_queue_generator_unittest.cc",
     "../browser/enterprise/reporting/report_scheduler_unittest.cc",
+    "../browser/enterprise/encryption/cache_encryption_provider_impl_unittest.cc",
     "../browser/enterprise/signin/interstitials/managed_profile_required_page_unittest.cc",
     "../browser/enterprise/util/managed_browser_utils_unittest.cc",
     "../browser/external_protocol/external_protocol_handler_unittest.cc",
@@ -8391,6 +8395,8 @@
       "//chrome/browser/resource_coordinator",
       "//chrome/browser/send_tab_to_self:unit_tests",
       "//chrome/browser/signin:signin_promo",
+      "//chrome/browser/startup",
+      "//chrome/browser/startup:unit_tests",
       "//chrome/browser/tab_group_sync:factories",
       "//chrome/browser/task_manager/common",
       "//chrome/browser/ui/bookmarks:unit_tests",
@@ -10415,6 +10421,10 @@
     }
 
     deps += [ "//components/enterprise:test_support" ]
+
+    if (is_win) {
+      deps += [ "//chrome/browser/win:registry_watcher" ]
+    }
   }
 
   if (toolkit_views) {
@@ -11233,20 +11243,20 @@
 
     sources = [
       "../browser/about_flags_browsertest.cc",
-      "../browser/ai/ai_on_device_browsertest.cc",
-      "../browser/browser_keyevents_browsertest.cc",
-      "../browser/chrome_render_widget_host_browsertests.cc",
-      "../browser/controlled_frame/controlled_frame_interactive_browsertest.cc",
-      "../browser/devtools/devtools_interactive_browsertest.cc",
+      "../browser/ai/ai_on_device_interactive_uitest.cc",
+      "../browser/browser_keyevents_interactive_uitest.cc",
+      "../browser/chrome_render_widget_host_interactive_uitest.cc",
+      "../browser/controlled_frame/controlled_frame_interactive_uitest.cc",
+      "../browser/devtools/devtools_interactive_uitest.cc",
       "../browser/fenced_frame/fenced_frame_viewport_observer_interactive_uitest.cc",
-      "../browser/focus_ring_browsertest.cc",
+      "../browser/focus_ring_interactive_uitest.cc",
       "../browser/media/webrtc/conditional_focus_interactive_uitest.cc",
       "../browser/media/webrtc/display_media_access_handler_interactive_uitest.cc",
       "../browser/media/webrtc/media_stream_permission_interactive_uitest.cc",
       "../browser/media/webrtc/webrtc_interactive_uitest.cc",
       "../browser/media/webrtc/webrtc_mediadevices_interactive_uitest.cc",
       "../browser/mouse_events_interactive_uitest.cc",
-      "../browser/net/cookie_encryption_provider_browsertest.cc",
+      "../browser/net/cookie_encryption_provider_interactive_uitest.cc",
       "../browser/new_tab_page/modules/new_tab_page_modules_interactive_uitest.cc",
       "../browser/new_tab_page/modules/test_support.cc",
       "../browser/new_tab_page/modules/test_support.h",
@@ -11260,24 +11270,24 @@
       "../browser/password_manager/password_manager_interactive_uitest.cc",
       "../browser/password_manager/password_user_education_interactive_uitest.cc",
       "../browser/permissions/one_time_permissions_tracker_helper_interactive_uitest.cc",
-      "../browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc",
+      "../browser/preloading/prerender/prerender_omnibox_interactive_uitest.cc",
       "../browser/renderer_context_menu/link_to_text_menu_observer_interactive_uitest.cc",
       "../browser/renderer_context_menu/render_view_context_menu_browsertest_util.cc",
       "../browser/renderer_context_menu/render_view_context_menu_browsertest_util.h",
       "../browser/renderer_context_menu/render_view_context_menu_interactive_uitest.cc",
-      "../browser/select_popup_browsertest.cc",
+      "../browser/select_popup_interactive_uitest.cc",
       "../browser/sessions/session_restore_interactive_uitest.cc",
-      "../browser/site_isolation/site_per_process_interactive_browsertest.cc",
-      "../browser/site_isolation/site_per_process_text_input_browsertest.cc",
-      "../browser/ssl/ask_before_http_dialog_controller_uitest.cc",
-      "../browser/ssl/typed_navigation_upgrade_throttle_browsertest.cc",
+      "../browser/site_isolation/site_per_process_interactive_uitest.cc",
+      "../browser/site_isolation/site_per_process_text_input_interactive_uitest.cc",
+      "../browser/ssl/ask_before_http_dialog_controller_interactive_uitest.cc",
+      "../browser/ssl/typed_navigation_upgrade_throttle_interactive_uitest.cc",
       "../browser/supervised_user/incognito_mode_interactive_uitest.cc",
-      "../browser/ui/browser_command_controller_interactive_browsertest.cc",
-      "../browser/ui/browser_focus_uitest.cc",
+      "../browser/ui/browser_command_controller_interactive_uitest.cc",
+      "../browser/ui/browser_focus_interactive_uitest.cc",
       "../browser/ui/extensions/controlled_home_dialog_interactive_uitest.cc",
       "../browser/ui/fullscreen_keyboard_browsertest_base.cc",
       "../browser/ui/fullscreen_keyboard_browsertest_base.h",
-      "../browser/ui/keyboard_lock_interactive_browsertest.cc",
+      "../browser/ui/keyboard_lock_interactive_uitest.cc",
       "../browser/ui/read_anything/read_anything_service_interactive_uitest.cc",
       "../browser/ui/read_anything/read_anything_side_panel_controller_interactive_uitest.cc",
       "../browser/ui/test/browser_ui_interactive_uitest.cc",
@@ -11289,7 +11299,7 @@
       "../browser/ui/test/test_browser_dialog.cc",
       "../browser/ui/test/test_browser_dialog.h",
       "../browser/ui/views/autofill/payments/bnpl_tos_view_desktop_interactive_uitest.cc",
-      "../browser/ui/views/autofill/payments/iban_bubble_view_uitest.cc",
+      "../browser/ui/views/autofill/payments/iban_bubble_view_interactive_uitest.cc",
       "../browser/ui/views/autofill/payments/select_bnpl_issuer_dialog_interactive_uitest.cc",
       "../browser/ui/views/content_test_utils.cc",
       "../browser/ui/views/content_test_utils.h",
@@ -11301,22 +11311,22 @@
       "../browser/ui/views/extensions/extensions_menu_view_interactive_uitest.cc",
       "../browser/ui/views/file_system_access/file_system_access_usage_bubble_interactive_uitest.cc",
       "../browser/ui/views/location_bar/content_setting_image_view_interactive_uitest.cc",
-      "../browser/ui/views/location_bar/find_bar_interactive_ui_tests.cc",
+      "../browser/ui/views/location_bar/find_bar_interactive_uitest.cc",
       "../browser/ui/views/media_router/media_router_dialog_controller_views_interactive_uitest.cc",
       "../browser/ui/views/new_tab_footer/footer_interactive_uitest.cc",
       "../browser/ui/views/optimization_guide/optimization_guide_icon_view_interactive_uitest.cc",
       "../browser/ui/views/page_info/page_info_bubble_view_interactive_uitest.cc",
       "../browser/ui/views/permissions/midi_permissions_flow_interactive_uitest.cc",
       "../browser/ui/views/permissions/permission_rhs_indicators_interactive_uitest.cc",
-      "../browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc",
-      "../browser/ui/views/promos/ios_promo_bubble_browsertest.cc",
+      "../browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_uitest.cc",
+      "../browser/ui/views/promos/ios_promo_bubble_interactive_uitest.cc",
       "../browser/ui/views/session_crashed_bubble_view_interactive_uitest.cc",
       "../browser/ui/views/side_panel/comments/comments_side_panel_coordinator_interactive_uitest.cc",
       "../browser/ui/views/tab_sharing/tab_sharing_ui_interactive_uitest.cc",
       "../browser/ui/views/tabs/vertical/vertical_tab_strip_bottom_container_interactive_uitest.cc",
       "../browser/ui/views/tabs/vertical/vertical_tab_strip_top_container_interactive_uitest.cc",
       "../browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_interactive_uitest.cc",
-      "../browser/ui/views/web_dialog_view_browsertest.cc",
+      "../browser/ui/views/web_dialog_view_interactive_uitest.cc",
       "../browser/ui/web_applications/web_app_interactive_uitest.cc",
       "../browser/ui/webui/cr_components/history_embeddings/history_embeddings_interactive_uitest.cc",
       "../browser/ui/webui/downloads/downloads_page_interactive_uitest.cc",
@@ -11325,7 +11335,7 @@
       "../browser/ui/webui/settings/settings_interactive_uitest.cc",
       "../browser/ui/webui/side_panel/customize_chrome/customize_chrome_interactive_uitest.cc",
       "../browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_interactive_uitest.cc",
-      "../browser/webapps/web_app_offline_browsertest.cc",
+      "../browser/webapps/web_app_offline_interactive_uitest.cc",
       "../browser/webauthn/chrome_webauthn_autofill_interactive_uitest.cc",
       "../browser/webauthn/webauthn_focus_interactive_uitest.cc",
       "//ui/base/clipboard/clipboard_unittest.cc",
@@ -11472,6 +11482,7 @@
       "//chrome/browser/ui/toasts:interactive_ui_tests",
       "//chrome/browser/ui/toolbar",
       "//chrome/browser/ui/views/bubble",
+      "//chrome/browser/ui/views/contextual_tasks:interactive_ui_tests",
       "//chrome/browser/ui/views/download",
       "//chrome/browser/ui/views/infobars",
       "//chrome/browser/ui/views/location_bar",
diff --git a/chrome/test/accessibility/ax_client/ax_client_main.cc b/chrome/test/accessibility/ax_client/ax_client_main.cc
index 0974891a..cf57aec6 100644
--- a/chrome/test/accessibility/ax_client/ax_client_main.cc
+++ b/chrome/test/accessibility/ax_client/ax_client_main.cc
@@ -11,6 +11,7 @@
 #include "base/command_line.h"
 #include "base/functional/callback.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/notreached.h"
 #include "base/process/memory.h"
 #include "base/run_loop.h"
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/page/CtaPageStation.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/page/CtaPageStation.java
index fd58bca..d0c781b 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/page/CtaPageStation.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/transit/page/CtaPageStation.java
@@ -108,6 +108,8 @@
      * from the app menu.
      */
     public IncognitoNewTabPageStation openNewIncognitoTabFast() {
+        assert mIsIncognito || !IncognitoUtils.shouldOpenIncognitoAsWindow()
+                : "Incognito tabs can only be opened in incognito windows.";
         return ChromeTriggers.invokeCustomMenuActionTo(R.id.new_incognito_tab_menu_id, this)
                 .arriveAt(IncognitoNewTabPageStation.newBuilder().initOpeningNewTab().build());
     }
diff --git a/chrome/test/base/chromeos/crosier/helper/fake_chrome/fake_chrome_main.cc b/chrome/test/base/chromeos/crosier/helper/fake_chrome/fake_chrome_main.cc
index c97c4d5..367415b0 100644
--- a/chrome/test/base/chromeos/crosier/helper/fake_chrome/fake_chrome_main.cc
+++ b/chrome/test/base/chromeos/crosier/helper/fake_chrome/fake_chrome_main.cc
@@ -7,6 +7,7 @@
 #include "base/at_exit.h"
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_executor.h"
 
diff --git a/chrome/test/chromedriver/logging.cc b/chrome/test/chromedriver/logging.cc
index 7d600ff..3c91e36 100644
--- a/chrome/test/chromedriver/logging.cc
+++ b/chrome/test/chromedriver/logging.cc
@@ -18,6 +18,7 @@
 #include "base/containers/contains.h"
 #include "base/json/json_reader.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/strings/stringprintf.h"
 #include "base/time/time.h"
 #include "base/values.h"
diff --git a/chrome/test/chromedriver/net/websocket.cc b/chrome/test/chromedriver/net/websocket.cc
index 5f825892..9b69c6f 100644
--- a/chrome/test/chromedriver/net/websocket.cc
+++ b/chrome/test/chromedriver/net/websocket.cc
@@ -260,10 +260,9 @@
 
   if (state_ == CONNECTING) {
     OnReadDuringHandshake(
-        read_buffer_->span().first(base::checked_cast<size_t>(code)));
+        read_buffer_->first(base::checked_cast<size_t>(code)));
   } else if (state_ == OPEN) {
-    OnReadDuringOpen(
-        read_buffer_->span().first(base::checked_cast<size_t>(code)));
+    OnReadDuringOpen(read_buffer_->first(base::checked_cast<size_t>(code)));
   }
 
   // If we were called by the event loop due to arrival of data, call Read()
diff --git a/chrome/test/data/privacy_budget/calls_canvas_to_blob.html b/chrome/test/data/privacy_budget/calls_canvas_to_blob.html
deleted file mode 100644
index 81d1737..0000000
--- a/chrome/test/data/privacy_budget/calls_canvas_to_blob.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Privacy Budget: Test page that calls Canvas.toBlob.</title>
-<script src="test_utils.js"></script>
-<script src="canvas_to_blob.js"></script>
diff --git a/chrome/test/data/webui/glic/browser_tests/glic_api_browsertest.ts b/chrome/test/data/webui/glic/browser_tests/glic_api_browsertest.ts
index 028973d..682ca49 100644
--- a/chrome/test/data/webui/glic/browser_tests/glic_api_browsertest.ts
+++ b/chrome/test/data/webui/glic/browser_tests/glic_api_browsertest.ts
@@ -1696,6 +1696,11 @@
         conversationChangeRequest.desiredView, ClientView.CONVERSATION);
   }
 
+  async testRemoveBlankInstanceOnClose() {
+    assertDefined(this.host.closePanel);
+    await this.host.closePanel();
+  }
+
   async testJournal() {
     assertDefined(this.host.getJournalHost);
     const journalHost = this.host.getJournalHost();
diff --git a/chrome/test/data/webui/settings/autofill_page_index_test.ts b/chrome/test/data/webui/settings/autofill_page_index_test.ts
index 4a5f6e5..7865429 100644
--- a/chrome/test/data/webui/settings/autofill_page_index_test.ts
+++ b/chrome/test/data/webui/settings/autofill_page_index_test.ts
@@ -32,7 +32,10 @@
   }
 
   setup(function() {
-    loadTimeData.overrideValues({showAutofillAiControl: false});
+    loadTimeData.overrideValues({
+      enableYourSavedInfoSettingsPage: false,
+      showAutofillAiControl: false,
+    });
     resetRouterForTesting();
     return createAutofillPageIndex();
   });
diff --git a/chrome/test/data/webui/settings/autofill_page_test.ts b/chrome/test/data/webui/settings/autofill_page_test.ts
index 74bef672..a887bf0 100644
--- a/chrome/test/data/webui/settings/autofill_page_test.ts
+++ b/chrome/test/data/webui/settings/autofill_page_test.ts
@@ -151,6 +151,7 @@
 
   setup(async function() {
     loadTimeData.overrideValues({
+      enableYourSavedInfoSettingsPage: false,
       shouldShowPayOverTimeSettings: true,
     });
 
diff --git a/chrome/test/data/webui/settings/route_test.ts b/chrome/test/data/webui/settings/route_test.ts
index e259ca3..5053573 100644
--- a/chrome/test/data/webui/settings/route_test.ts
+++ b/chrome/test/data/webui/settings/route_test.ts
@@ -336,6 +336,7 @@
       autofill: true,
     });
     loadTimeData.overrideValues({
+      enableYourSavedInfoSettingsPage: false,
       showAutofillAiControl: true,
     });
     resetRouterForTesting();
diff --git a/chrome/test/data/webui/settings/settings_menu_interactive_ui_test.ts b/chrome/test/data/webui/settings/settings_menu_interactive_ui_test.ts
index 2333406..b4d3876 100644
--- a/chrome/test/data/webui/settings/settings_menu_interactive_ui_test.ts
+++ b/chrome/test/data/webui/settings/settings_menu_interactive_ui_test.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import type {SettingsMenuElement} from 'chrome://settings/settings.js';
-import {resetPageVisibilityForTesting} from 'chrome://settings/settings.js';
+import {loadTimeData, resetPageVisibilityForTesting} from 'chrome://settings/settings.js';
 import {assertEquals} from 'chrome://webui-test/chai_assert.js';
 
 suite('SettingsMenuInteractiveUITest', () => {
@@ -16,6 +16,12 @@
   }
 
   test('focusFirstItem', () => {
+    resetPageVisibilityForTesting({
+      people: true,
+      autofill: true,
+    });
+
+    loadTimeData.overrideValues({enableYourSavedInfoSettingsPage: false});
     createMenu();
     settingsMenu.focusFirstItem();
     assertEquals(settingsMenu.$.people, settingsMenu.shadowRoot!.activeElement);
@@ -24,9 +30,32 @@
       people: false,
       autofill: true,
     });
+
     createMenu();
     settingsMenu.focusFirstItem();
     assertEquals(
         settingsMenu.$.autofill, settingsMenu.shadowRoot!.activeElement);
   });
+
+  test('focusFirstItemWithYourSavedInfoPageOn', () => {
+    resetPageVisibilityForTesting({
+      people: true,
+      yourSavedInfo: true,
+    });
+
+    loadTimeData.overrideValues({enableYourSavedInfoSettingsPage: true});
+    createMenu();
+    settingsMenu.focusFirstItem();
+    assertEquals(settingsMenu.$.people, settingsMenu.shadowRoot!.activeElement);
+
+    resetPageVisibilityForTesting({
+      people: false,
+      yourSavedInfo: true,
+    });
+
+    createMenu();
+    settingsMenu.focusFirstItem();
+    assertEquals(
+        settingsMenu.$.yourSavedInfo, settingsMenu.shadowRoot!.activeElement);
+  });
 });
diff --git a/chrome/test/data/webui/settings/settings_menu_test.ts b/chrome/test/data/webui/settings/settings_menu_test.ts
index e3b106a..49885326 100644
--- a/chrome/test/data/webui/settings/settings_menu_test.ts
+++ b/chrome/test/data/webui/settings/settings_menu_test.ts
@@ -180,6 +180,11 @@
   });
 
   test('autofillPageMenuClick', async function() {
+    loadTimeData.overrideValues({enableYourSavedInfoSettingsPage: false});
+    resetRouterForTesting();
+    createSettingsMenu();
+    await flushTasks();
+
     const entry = settingsMenu.shadowRoot!.querySelector<HTMLElement>(
       'a[href=\'/autofill\']');
     assertTrue(!!entry);
diff --git a/chrome/test/data/webui/side_panel/read_anything/read_aloud_model_test.ts b/chrome/test/data/webui/side_panel/read_anything/read_aloud_model_test.ts
index 0cf2bcd..c2790ee 100644
--- a/chrome/test/data/webui/side_panel/read_anything/read_aloud_model_test.ts
+++ b/chrome/test/data/webui/side_panel/read_anything/read_aloud_model_test.ts
@@ -28,6 +28,27 @@
     assertEquals(sentence, node.getText().trim());
   }
 
+  // Creates a linked citation intended to mimic citations in Wikipedia and
+  // other articles. Of the format:
+  // <sup><a><span>[</span>text content<span>]</span></a></sup>
+  function createLinkedCitationSuperscript(text: string): HTMLElement {
+    const superscript = document.createElement('sup');
+    const link = document.createElement('a');
+    const openingBracketSpan = document.createElement('span');
+    const textSpan = document.createTextNode(text);
+    const closingBracketSpan = document.createElement('span');
+
+    openingBracketSpan.textContent = '[';
+    closingBracketSpan.textContent = ']';
+
+    link.appendChild(openingBracketSpan);
+    link.appendChild(textSpan);
+    link.appendChild(closingBracketSpan);
+
+    superscript.appendChild(link);
+    return superscript;
+  }
+
   setup(() => {
     // Clearing the DOM should always be done first.
     document.body.innerHTML = window.trustedTypes!.emptyHTML;
@@ -1094,4 +1115,99 @@
         getReadAloudModel().moveSpeechForward();
         assertTextEmpty();
       });
+
+  test(
+      'getCurrentTextSegments superscript combined with current segment',
+      async () => {
+        const div = document.createElement('div');
+        const sentence1 = document.createElement('b');
+        sentence1.textContent = 'And I am almost there.';
+
+        const sentence2 = document.createElement('sup');
+        sentence2.textContent = '2';
+
+        div.appendChild(sentence1);
+        div.appendChild(sentence2);
+        document.body.appendChild(div);
+
+        await microtasksFinished();
+        getReadAloudModel().init(ReadAloudNode.create(document.body)!);
+        assertEquals(
+            sentence1.textContent + sentence2.textContent,
+            getReadAloudModel().getCurrentTextContent().trim());
+
+        getReadAloudModel().moveSpeechForward();
+        assertTextEmpty();
+      });
+
+  test(
+      'getCurrentTextSegments superscript combined with preceding sentence instead of succeeding sentence',
+      async () => {
+        // Create a container element to hold the simplified structure
+        const simplifiedContainer = document.createElement('p');
+
+        // Text before the citation
+        simplifiedContainer.appendChild(
+            document.createTextNode('I\'m coming!'));
+
+        // <sup><a><span>[</span>b<span>]</span></a></sup>
+        const citation = createLinkedCitationSuperscript('b');
+        simplifiedContainer.appendChild(citation);
+
+        // Text after the citation.
+        simplifiedContainer.appendChild(
+            document.createTextNode(' Wait for me.'));
+
+        document.body.appendChild(simplifiedContainer);
+
+        await microtasksFinished();
+        getReadAloudModel().init(ReadAloudNode.create(document.body)!);
+        assertEquals(
+            'I\'m coming![b]',
+            getReadAloudModel().getCurrentTextContent().trim());
+        getReadAloudModel().moveSpeechForward();
+        assertEquals(
+            'Wait for me.', getReadAloudModel().getCurrentTextContent().trim());
+
+        getReadAloudModel().moveSpeechForward();
+        assertTextEmpty();
+      });
+
+  test(
+      'getCurrentTextSegments superscript combined with preceding sentence with multiple superscripts',
+      async () => {
+        // Create a container element to hold the simplified structure
+        const simplifiedContainer = document.createElement('p');
+
+        // Text before the citation
+        simplifiedContainer.appendChild(
+            document.createTextNode('Wait for me, I\'m coming.'));
+
+        // <sup><a><span>[</span>7<span>]</span></a></sup>
+        const citation7 = createLinkedCitationSuperscript('7');
+        simplifiedContainer.appendChild(citation7);
+
+        // <sup><a><span>[</span>8<span>]</span></a></sup>
+        const citation8 = createLinkedCitationSuperscript('8');
+        simplifiedContainer.appendChild(citation8);
+
+        // Text after the citation.
+        simplifiedContainer.appendChild(
+            document.createTextNode(' Show the way so we can see.'));
+
+        document.body.appendChild(simplifiedContainer);
+
+        await microtasksFinished();
+        getReadAloudModel().init(ReadAloudNode.create(document.body)!);
+        assertEquals(
+            'Wait for me, I\'m coming.[7][8]',
+            getReadAloudModel().getCurrentTextContent().trim());
+        getReadAloudModel().moveSpeechForward();
+        assertEquals(
+            'Show the way so we can see.',
+            getReadAloudModel().getCurrentTextContent().trim());
+
+        getReadAloudModel().moveSpeechForward();
+        assertTextEmpty();
+      });
 });
diff --git a/chrome/test/media/BUILD.gn b/chrome/test/media/BUILD.gn
index 3f7b00e..e8dec6df 100644
--- a/chrome/test/media/BUILD.gn
+++ b/chrome/test/media/BUILD.gn
@@ -5,5 +5,8 @@
 # Lab performance tests
 group("performance_tests") {
   testonly = true
-  deps = [ "//chrome/test/media/performance:videostack_performance_test" ]
+  deps = [
+    "//chrome/test/media/performance:openscreen_cast_performance_test",
+    "//chrome/test/media/performance:videostack_performance_test",
+  ]
 }
diff --git a/chrome/test/media/performance/BUILD.gn b/chrome/test/media/performance/BUILD.gn
index b6761b6..0e4a75ac 100644
--- a/chrome/test/media/performance/BUILD.gn
+++ b/chrome/test/media/performance/BUILD.gn
@@ -15,3 +15,15 @@
     "//build/fuchsia/test/repeating_log.py",
   ]
 }
+
+python_library("openscreen_cast_performance_test") {
+  testonly = true
+  pydeps_file = "openscreen_cast_performance_test.pydeps"
+  data = [
+    "//.vpython3",
+    "//build/util/lib/proto",
+    "//fuchsia_web/av_testing/server.py",
+    "//fuchsia_web/av_testing/video.html",
+    "//build/fuchsia/test/repeating_log.py",
+  ]
+}
diff --git a/chrome/test/media_router/performance/openscreen_cast_performance_test.py b/chrome/test/media/performance/openscreen_cast_performance_test.py
similarity index 100%
rename from chrome/test/media_router/performance/openscreen_cast_performance_test.py
rename to chrome/test/media/performance/openscreen_cast_performance_test.py
diff --git a/chrome/test/media_router/performance/openscreen_cast_performance_test.pydeps b/chrome/test/media/performance/openscreen_cast_performance_test.pydeps
similarity index 71%
rename from chrome/test/media_router/performance/openscreen_cast_performance_test.pydeps
rename to chrome/test/media/performance/openscreen_cast_performance_test.pydeps
index a125422..3f1fd43 100644
--- a/chrome/test/media_router/performance/openscreen_cast_performance_test.pydeps
+++ b/chrome/test/media/performance/openscreen_cast_performance_test.pydeps
@@ -1,5 +1,5 @@
 # Generated by running:
-#   build/print_python_deps.py --root chrome/test/media_router/performance --output chrome/test/media_router/performance/openscreen_cast_performance_test.pydeps chrome/test/media_router/performance/openscreen_cast_performance_test.py
+#   build/print_python_deps.py --root chrome/test/media/performance --output chrome/test/media/performance/openscreen_cast_performance_test.pydeps chrome/test/media/performance/openscreen_cast_performance_test.py
 ../../../../build/fuchsia/test/repeating_log.py
 ../../../../build/util/lib/proto/average.py
 ../../../../build/util/lib/proto/count.py
diff --git a/chrome/test/media_router/BUILD.gn b/chrome/test/media_router/BUILD.gn
index bb5ca3f..8fa580f 100644
--- a/chrome/test/media_router/BUILD.gn
+++ b/chrome/test/media_router/BUILD.gn
@@ -112,12 +112,6 @@
   ]
 }
 
-# Lab performance tests
-group("performance_tests") {
-  testonly = true
-  deps = [ "//chrome/test/media_router/performance:openscreen_cast_performance_test" ]
-}
-
 # Run separately.  TODO: Documentation on how to run
 if (enable_downstream_media_tests) {
   group("swarming_tests") {
diff --git a/chrome/test/media_router/performance/BUILD.gn b/chrome/test/media_router/performance/BUILD.gn
deleted file mode 100644
index b0b0ec8..0000000
--- a/chrome/test/media_router/performance/BUILD.gn
+++ /dev/null
@@ -1,13 +0,0 @@
-import("//build/config/python.gni")
-
-python_library("openscreen_cast_performance_test") {
-  testonly = true
-  pydeps_file = "openscreen_cast_performance_test.pydeps"
-  data = [
-    "//.vpython3",
-    "//build/util/lib/proto",
-    "//fuchsia_web/av_testing/server.py",
-    "//fuchsia_web/av_testing/video.html",
-    "//build/fuchsia/test/repeating_log.py",
-  ]
-}
diff --git a/chrome/updater/policy/mac/managed_preference_policy_manager_impl.mm b/chrome/updater/policy/mac/managed_preference_policy_manager_impl.mm
index 14959df..d19a692 100644
--- a/chrome/updater/policy/mac/managed_preference_policy_manager_impl.mm
+++ b/chrome/updater/policy/mac/managed_preference_policy_manager_impl.mm
@@ -13,17 +13,18 @@
 
 namespace {
 // Constants for managed preference policy keys.
-NSString* kGlobalPolicyKey = @"global";
-NSString* kUpdateDefaultKey = @"UpdateDefault";
-NSString* kDownloadPreferenceKey = @"DownloadPreference";
-NSString* kUpdatesSuppressedStartHourKey = @"UpdatesSuppressedStartHour";
-NSString* kUpdatesSuppressedStartMinuteKey = @"UpdatesSuppressedStartMin";
-NSString* kUpdatesSuppressedDurationMinuteKey = @"UpdatesSuppressedDurationMin";
-NSString* kTargetChannelKey = @"TargetChannel";
-NSString* kTargetVersionPrefixKey = @"TargetVersionPrefix";
-NSString* kRollbackToTargetVersionKey = @"RollbackToTargetVersion";
-NSString* kMajorVersionRolloutKey = @"MajorVersionRolloutPolicy";
-NSString* kMinorVersionRolloutKey = @"MinorVersionRolloutPolicy";
+NSString* const kGlobalPolicyKey = @"global";
+NSString* const kUpdateDefaultKey = @"UpdateDefault";
+NSString* const kDownloadPreferenceKey = @"DownloadPreference";
+NSString* const kUpdatesSuppressedStartHourKey = @"UpdatesSuppressedStartHour";
+NSString* const kUpdatesSuppressedStartMinuteKey = @"UpdatesSuppressedStartMin";
+NSString* const kUpdatesSuppressedDurationMinuteKey =
+    @"UpdatesSuppressedDurationMin";
+NSString* const kTargetChannelKey = @"TargetChannel";
+NSString* const kTargetVersionPrefixKey = @"TargetVersionPrefix";
+NSString* const kRollbackToTargetVersionKey = @"RollbackToTargetVersion";
+NSString* const kMajorVersionRolloutKey = @"MajorVersionRolloutPolicy";
+NSString* const kMinorVersionRolloutKey = @"MinorVersionRolloutPolicy";
 }  // namespace
 
 namespace updater {
diff --git a/chrome/updater/test/unit_test_util.cc b/chrome/updater/test/unit_test_util.cc
index 1ce0a54..0041430 100644
--- a/chrome/updater/test/unit_test_util.cc
+++ b/chrome/updater/test/unit_test_util.cc
@@ -23,6 +23,7 @@
 #include "base/functional/function_ref.h"
 #include "base/i18n/time_formatting.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/path_service.h"
 #include "base/process/kill.h"
diff --git a/chrome/updater/util/util.cc b/chrome/updater/util/util.cc
index e96bdf1..50083e6 100644
--- a/chrome/updater/util/util.cc
+++ b/chrome/updater/util/util.cc
@@ -31,6 +31,7 @@
 #include "base/functional/callback.h"
 #include "base/functional/function_ref.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/path_service.h"
 #include "base/strings/escape.h"
 #include "base/strings/strcat.h"
diff --git a/chrome/utility/safe_browsing/mac/dmg_fuzzer.cc b/chrome/utility/safe_browsing/mac/dmg_fuzzer.cc
index f21b940e..9bd2fe6 100644
--- a/chrome/utility/safe_browsing/mac/dmg_fuzzer.cc
+++ b/chrome/utility/safe_browsing/mac/dmg_fuzzer.cc
@@ -11,6 +11,7 @@
 #include "base/command_line.h"
 #include "base/containers/span.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "chrome/utility/safe_browsing/mac/hfs.h"
 #include "chrome/utility/safe_browsing/mac/read_stream.h"
 #include "chrome/utility/safe_browsing/mac/udif.h"
diff --git a/chrome/windows_services/service_program/logging_support.cc b/chrome/windows_services/service_program/logging_support.cc
index ddba9c7..e94e765d 100644
--- a/chrome/windows_services/service_program/logging_support.cc
+++ b/chrome/windows_services/service_program/logging_support.cc
@@ -10,6 +10,7 @@
 
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/process/process.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/win/scoped_handle.h"
diff --git a/chromecast/app/cast_main_delegate.cc b/chromecast/app/cast_main_delegate.cc
index e150dd1d..fef021c 100644
--- a/chromecast/app/cast_main_delegate.cc
+++ b/chromecast/app/cast_main_delegate.cc
@@ -19,6 +19,7 @@
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/metrics/field_trial.h"
 #include "base/no_destructor.h"
 #include "base/path_service.h"
diff --git a/chromecast/base/init_command_line_shlib.cc b/chromecast/base/init_command_line_shlib.cc
index 8559754..19ab6830 100644
--- a/chromecast/base/init_command_line_shlib.cc
+++ b/chromecast/base/init_command_line_shlib.cc
@@ -6,6 +6,7 @@
 
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "chromecast/chromecast_buildflags.h"
 
 namespace chromecast {
diff --git a/chromecast/crash/linux/crash_uploader.cc b/chromecast/crash/linux/crash_uploader.cc
index a46c559a..4c73ffe00 100644
--- a/chromecast/crash/linux/crash_uploader.cc
+++ b/chromecast/crash/linux/crash_uploader.cc
@@ -12,6 +12,7 @@
 #include "base/command_line.h"
 #include "base/functional/bind.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/task/single_thread_task_executor.h"
 #include "base/threading/platform_thread.h"
diff --git a/chromecast/external_mojo/external_service_support/process_setup.cc b/chromecast/external_mojo/external_service_support/process_setup.cc
index 49323943..9c8edd9 100644
--- a/chromecast/external_mojo/external_service_support/process_setup.cc
+++ b/chromecast/external_mojo/external_service_support/process_setup.cc
@@ -11,6 +11,7 @@
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "build/build_config.h"
 #include "chromecast/base/chromecast_switches.h"
 #include "chromecast/chromecast_buildflags.h"
diff --git a/chromecast/tracing/tracing_service_main.cc b/chromecast/tracing/tracing_service_main.cc
index beb454d6..f5c215d 100644
--- a/chromecast/tracing/tracing_service_main.cc
+++ b/chromecast/tracing/tracing_service_main.cc
@@ -18,6 +18,7 @@
 #include "base/containers/span.h"
 #include "base/functional/bind.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/memory/weak_ptr.h"
 #include "base/message_loop/message_pump_for_io.h"
 #include "base/message_loop/message_pump_type.h"
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index ef723cc..653867f 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-16486.0.0-1073214
\ No newline at end of file
+16487.0.0-1073220
\ No newline at end of file
diff --git a/chromeos/ash/services/auth_factor_config/BUILD.gn b/chromeos/ash/services/auth_factor_config/BUILD.gn
index 555b98b..81f3746c 100644
--- a/chromeos/ash/services/auth_factor_config/BUILD.gn
+++ b/chromeos/ash/services/auth_factor_config/BUILD.gn
@@ -27,6 +27,7 @@
     "//chromeos/ash/components/cryptohome",
     "//chromeos/ash/components/login/auth",
     "//chromeos/ash/components/osauth/public",
+    "//chromeos/ash/components/policy/local_auth_factors",
     "//components/prefs",
     "//components/user_manager",
   ]
diff --git a/chromeos/ash/services/auth_factor_config/pin_factor_editor.cc b/chromeos/ash/services/auth_factor_config/pin_factor_editor.cc
index 05be5d3c..dff1dd18 100644
--- a/chromeos/ash/services/auth_factor_config/pin_factor_editor.cc
+++ b/chromeos/ash/services/auth_factor_config/pin_factor_editor.cc
@@ -6,7 +6,11 @@
 
 #include "ash/constants/ash_features.h"
 #include "ash/constants/ash_pref_names.h"
+#include "chromeos/ash/components/osauth/public/auth_parts.h"
+#include "chromeos/ash/components/osauth/public/auth_policy_connector.h"
 #include "chromeos/ash/components/osauth/public/auth_session_storage.h"
+#include "chromeos/ash/components/osauth/public/common_types.h"
+#include "chromeos/ash/components/policy/local_auth_factors/local_auth_factors_complexity.h"
 #include "chromeos/ash/services/auth_factor_config/auth_factor_config.h"
 #include "components/user_manager/known_user.h"
 #include "components/user_manager/user.h"
@@ -14,6 +18,24 @@
 
 namespace ash::auth {
 
+namespace {
+
+mojom::PinComplexity LocalAuthFactorsComplexityToMojom(
+    LocalAuthFactorsComplexity complexity) {
+  switch (complexity) {
+    case LocalAuthFactorsComplexity::kNone:
+      return mojom::PinComplexity::kErrNone;
+    case LocalAuthFactorsComplexity::kLow:
+      return mojom::PinComplexity::kErrLow;
+    case LocalAuthFactorsComplexity::kMedium:
+      return mojom::PinComplexity::kErrMedium;
+    case LocalAuthFactorsComplexity::kHigh:
+      return mojom::PinComplexity::kErrHigh;
+  }
+}
+
+}  // namespace
+
 PinFactorEditor::PinFactorEditor(AuthFactorConfig* auth_factor_config,
                                  PinBackendDelegate* pin_backend)
     : auth_factor_config_(auth_factor_config),
@@ -114,7 +136,6 @@
 void PinFactorEditor::ObtainContext(
     const std::string& auth_token,
     base::OnceCallback<void(std::unique_ptr<UserContext>)> callback) {
-
   if (!ash::AuthSessionStorage::Get()->IsValid(auth_token)) {
     std::move(callback).Run(nullptr);
     return;
@@ -326,6 +347,50 @@
   return;
 }
 
+void PinFactorEditor::CheckPinComplexity(
+    const std::string& auth_token,
+    const std::string& pin,
+    base::OnceCallback<void(mojom::PinComplexity)> callback) {
+  ObtainContext(auth_token,
+                base::BindOnce(&PinFactorEditor::CheckPinComplexityWithContext,
+                               weak_factory_.GetWeakPtr(), auth_token, pin,
+                               std::move(callback)));
+}
+
+void PinFactorEditor::CheckPinComplexityWithContext(
+    const std::string& auth_token,
+    const std::string& pin,
+    base::OnceCallback<void(mojom::PinComplexity)> callback,
+    std::unique_ptr<UserContext> context) {
+  if (!context) {
+    LOG(ERROR) << "Invalid auth token";
+    std::move(callback).Run(mojom::PinComplexity::kInvalidTokenError);
+    return;
+  }
+
+  AccountId account_id = context->GetAccountId();
+  ash::AuthSessionStorage::Get()->Return(auth_token, std::move(context));
+
+  std::optional<LocalAuthFactorsComplexity> complexity =
+      AuthParts::Get()->GetAuthPolicyConnector()->GetLocalAuthFactorsComplexity(
+          account_id);
+  if (!complexity.has_value()) {
+    // The policy is not set.
+    return std::move(callback).Run(mojom::PinComplexity::kOk);
+  }
+
+  // TODO(crbug.com/445625494): Unify this method with the other codepath going
+  // through the legacy QuickUnlockPrivate API.
+
+  bool ok = policy::local_auth_factors::CheckPinComplexity(pin, *complexity);
+
+  mojom::PinComplexity result =
+      ok ? mojom::PinComplexity::kOk
+         : LocalAuthFactorsComplexityToMojom(*complexity);
+
+  std::move(callback).Run(result);
+}
+
 void PinFactorEditor::BindReceiver(
     mojo::PendingReceiver<mojom::PinFactorEditor> receiver) {
   receivers_.Add(this, std::move(receiver));
diff --git a/chromeos/ash/services/auth_factor_config/pin_factor_editor.h b/chromeos/ash/services/auth_factor_config/pin_factor_editor.h
index 3267226d..a63f3be 100644
--- a/chromeos/ash/services/auth_factor_config/pin_factor_editor.h
+++ b/chromeos/ash/services/auth_factor_config/pin_factor_editor.h
@@ -38,6 +38,10 @@
       const std::string& auth_token,
       base::OnceCallback<void(std::optional<mojom::AuthFactor>)> callback)
       override;
+  void CheckPinComplexity(
+      const std::string& auth_token,
+      const std::string& pin,
+      base::OnceCallback<void(mojom::PinComplexity)> callback) override;
 
   void BindReceiver(mojo::PendingReceiver<mojom::PinFactorEditor> receiver);
 
@@ -107,6 +111,12 @@
       base::OnceCallback<void(std::optional<mojom::AuthFactor>)> callback,
       AuthFactorSet factors);
 
+  void CheckPinComplexityWithContext(
+      const std::string& auth_token,
+      const std::string& pin,
+      base::OnceCallback<void(mojom::PinComplexity)> callback,
+      std::unique_ptr<UserContext> context);
+
   raw_ptr<AuthFactorConfig> auth_factor_config_;
   raw_ptr<PinBackendDelegate> pin_backend_;
   mojo::ReceiverSet<mojom::PinFactorEditor> receivers_;
diff --git a/chromeos/ash/services/auth_factor_config/public/mojom/auth_factor_config.mojom b/chromeos/ash/services/auth_factor_config/public/mojom/auth_factor_config.mojom
index 74bd4b1..31591f7 100644
--- a/chromeos/ash/services/auth_factor_config/public/mojom/auth_factor_config.mojom
+++ b/chromeos/ash/services/auth_factor_config/public/mojom/auth_factor_config.mojom
@@ -71,7 +71,6 @@
   // Checks whether the user can configure |factor|. Is false if the factor is
   // not supported or e.g. a policy forces |factor| to be enabled/disabled.
   IsEditable(string auth_token, AuthFactor factor) => (bool editable);
-
 };
 
 // Returned from various operations that change ("configure") something about
@@ -98,6 +97,18 @@
   Configure(string auth_token, bool enabled) => (ConfigureResult result);
 };
 
+// A value describing the complexity of a pin.
+enum PinComplexity {
+  kOk,
+  kInvalidTokenError,
+  // These values correspond to the values of the `LocalAuthFactorsComplexity`
+  // policy (components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactorsComplexity.yaml).
+  kErrNone,
+  kErrLow,
+  kErrMedium,
+  kErrHigh,
+};
+
 // Interface for methods specific to pin authentication. Served from chrome
 // ash, intended to be consumed by the following webuis:
 // * chrome://os-settings
@@ -105,14 +116,21 @@
 interface PinFactorEditor {
   // Set the user pin to the desired value.
   SetPin(string auth_token, string pin) => (ConfigureResult result);
+
   // Update an already set user pin to the desired value. This method will
   // only update a cryptohome pin if already present, for prefs-based pins and
   // empty pins, it's a no-op.
   UpdatePin(string auth_token, string pin) => (ConfigureResult result);
+
   // Remove the pin factor for the user.
   RemovePin(string auth_token) => (ConfigureResult result);
+
   // Returns the type of the pin factor, or nullopt if it has none.
   GetConfiguredPinFactor(string auth_token) => (AuthFactor? pin_factor);
+
+  // Returns a value describing the complexity of the provided pin value.
+  CheckPinComplexity(string auth_token, string pin) =>
+      (PinComplexity complexity);
 };
 
 // A value describing the complexity of a password.
diff --git a/clank b/clank
index ca42da3..d6c606d 160000
--- a/clank
+++ b/clank
@@ -1 +1 @@
-Subproject commit ca42da3e3a185a97996945b6b404a00823d0183c
+Subproject commit d6c606dacae7862791a9ac6e7abbf2d1b92323fa
diff --git a/components/android_autofill/browser/android_autofill_client.cc b/components/android_autofill/browser/android_autofill_client.cc
index d67373d9..67fcb9b 100644
--- a/components/android_autofill/browser/android_autofill_client.cc
+++ b/components/android_autofill/browser/android_autofill_client.cc
@@ -231,10 +231,6 @@
   NOTREACHED();
 }
 
-bool AndroidAutofillClient::IsAutofillPaymentMethodsEnabled() const {
-  NOTREACHED();
-}
-
 bool AndroidAutofillClient::IsWalletStorageEnabled() const {
   return false;
 }
diff --git a/components/android_autofill/browser/android_autofill_client.h b/components/android_autofill/browser/android_autofill_client.h
index e0d24d3..e1227882 100644
--- a/components/android_autofill/browser/android_autofill_client.h
+++ b/components/android_autofill/browser/android_autofill_client.h
@@ -126,7 +126,6 @@
   void HideAutofillSuggestions(autofill::SuggestionHidingReason reason) final;
   bool IsAutofillEnabled() const final;
   bool IsAutofillProfileEnabled() const final;
-  bool IsAutofillPaymentMethodsEnabled() const final;
   bool IsWalletStorageEnabled() const final;
   bool IsAutocompleteEnabled() const final;
   bool IsPasswordManagerEnabled() const final;
diff --git a/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl.cc b/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl.cc
index 240c9e6..cbf62a8 100644
--- a/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl.cc
+++ b/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl.cc
@@ -369,7 +369,8 @@
       .has_fillable_address = client.IsAutofillProfileEnabled() &&
                               !pdm.address_data_manager().GetProfiles().empty(),
       .has_fillable_credit_card =
-          client.IsAutofillPaymentMethodsEnabled() &&
+          client.GetPaymentsAutofillClient()
+              ->IsAutofillPaymentMethodsEnabled() &&
           !pdm.payments_data_manager().GetCreditCards().empty(),
   };
 }
diff --git a/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl_unittest.cc b/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl_unittest.cc
index 7a4bacc..58f4b55f 100644
--- a/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl_unittest.cc
+++ b/components/autofill/content/browser/integrators/glic/autofill_annotations_provider_impl_unittest.cc
@@ -254,7 +254,8 @@
 // it exists but autofill is disabled.
 TEST_F(AutofillAnnotationsProviderImplTest,
        GetAutofillAvailability_CreditCard_AutofillDisabled) {
-  client()->SetAutofillPaymentMethodsEnabled(false);
+  client()->GetPaymentsAutofillClient()->SetAutofillPaymentMethodsEnabled(
+      false);
 
   client()->GetPersonalDataManager().payments_data_manager().AddCreditCard(
       CreateCreditCard());
diff --git a/components/autofill/core/browser/foundations/autofill_client.h b/components/autofill/core/browser/foundations/autofill_client.h
index 076aede2..5cd94ec 100644
--- a/components/autofill/core/browser/foundations/autofill_client.h
+++ b/components/autofill/core/browser/foundations/autofill_client.h
@@ -596,10 +596,6 @@
   // the client supports Autofill.
   virtual bool IsAutofillProfileEnabled() const = 0;
 
-  // Returns true if the value of the AutofillCreditCardEnabled pref is true
-  // and the client supports Autofill.
-  virtual bool IsAutofillPaymentMethodsEnabled() const = 0;
-
   // Whether the Autocomplete feature of Autofill should be enabled.
   virtual bool IsAutocompleteEnabled() const = 0;
 
diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager.cc b/components/autofill/core/browser/foundations/browser_autofill_manager.cc
index 3091eb6..f877114 100644
--- a/components/autofill/core/browser/foundations/browser_autofill_manager.cc
+++ b/components/autofill/core/browser/foundations/browser_autofill_manager.cc
@@ -623,7 +623,8 @@
     // Update Personal Data with the form's submitted data.
     client.GetFormDataImporter()->ImportAndProcessFormData(
         form_structure, client.IsAutofillProfileEnabled(),
-        client.IsAutofillPaymentMethodsEnabled(), ukm_source_id);
+        client.GetPaymentsAutofillClient()->IsAutofillPaymentMethodsEnabled(),
+        ukm_source_id);
   }
 
   AutofillPlusAddressDelegate* plus_address_delegate =
@@ -848,7 +849,9 @@
     const FormStructure& form,
     const AutofillField& trigger_field) {
   if (!client().GetPaymentsAutofillClient()->HasCreditCardScanFeature() ||
-      !client().IsAutofillPaymentMethodsEnabled()) {
+      !client()
+           .GetPaymentsAutofillClient()
+           ->IsAutofillPaymentMethodsEnabled()) {
     return false;
   }
 
@@ -890,9 +893,11 @@
           CHECK_DEREF(client().GetPrefs()));
     }
     autofill_metrics::LogIsAutofillPaymentMethodsEnabledAtPageLoad(
-        client().IsAutofillPaymentMethodsEnabled(),
+        client().GetPaymentsAutofillClient()->IsAutofillPaymentMethodsEnabled(),
         metrics_->signin_state_for_metrics);
-    if (!client().IsAutofillPaymentMethodsEnabled()) {
+    if (!client()
+             .GetPaymentsAutofillClient()
+             ->IsAutofillPaymentMethodsEnabled()) {
       autofill_metrics::LogAutofillPaymentMethodsDisabledReasonAtPageLoad(
           CHECK_DEREF(client().GetPrefs()));
     }
@@ -1018,7 +1023,7 @@
   if (client().IsAutofillProfileEnabled()) {
     metrics_->address_form_event_logger.OnWillSubmitForm(*submitted_form);
   }
-  if (client().IsAutofillPaymentMethodsEnabled()) {
+  if (client().GetPaymentsAutofillClient()->IsAutofillPaymentMethodsEnabled()) {
     metrics_->credit_card_form_event_logger.set_signin_state_for_metrics(
         metrics_->signin_state_for_metrics);
     metrics_->credit_card_form_event_logger.OnWillSubmitForm(*submitted_form);
@@ -1032,7 +1037,7 @@
     address_on_typing_manager_.LogAddressOnTypingCorrectnessMetrics(
         *submitted_form);
   }
-  if (client().IsAutofillPaymentMethodsEnabled()) {
+  if (client().GetPaymentsAutofillClient()->IsAutofillPaymentMethodsEnabled()) {
     metrics_->credit_card_form_event_logger.set_signin_state_for_metrics(
         metrics_->signin_state_for_metrics);
     metrics_->credit_card_form_event_logger.OnFormSubmitted(*submitted_form);
@@ -1697,7 +1702,9 @@
     } else {
       const DenseSet<AmountExtractionManager::EligibleFeature>
           eligible_features = GetAmountExtractionManager().GetEligibleFeatures(
-              client().IsAutofillPaymentMethodsEnabled(),
+              client()
+                  .GetPaymentsAutofillClient()
+                  ->IsAutofillPaymentMethodsEnabled(),
               ShouldSuppressSuggestions(context.suppress_reason, log_manager()),
               !suggestions.empty(), context.filling_product,
               autofill_field->Type().GetCreditCardType());
@@ -3178,7 +3185,9 @@
       }
       break;
     case FillingProduct::kCreditCard:
-      if (client().IsAutofillPaymentMethodsEnabled()) {
+      if (client()
+              .GetPaymentsAutofillClient()
+              ->IsAutofillPaymentMethodsEnabled()) {
         suggestions = GetCreditCardSuggestions(form, *form_structure, field,
                                                *autofill_field);
       }
diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc
index fea0e915..c18d2d1 100644
--- a/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc
@@ -2218,7 +2218,7 @@
 
   // Disable Autofill.
   autofill_client().SetAutofillProfileEnabled(false);
-  autofill_client().SetAutofillPaymentMethodsEnabled(false);
+  payments_client().SetAutofillPaymentMethodsEnabled(false);
 
   OnAskForValuesToFill(form, form.fields()[0]);
   EXPECT_FALSE(external_delegate()->on_suggestions_returned_seen());
@@ -3389,7 +3389,7 @@
 
   // Disable Autofill.
   autofill_client().SetAutofillProfileEnabled(false);
-  autofill_client().SetAutofillPaymentMethodsEnabled(false);
+  payments_client().SetAutofillPaymentMethodsEnabled(false);
 
   // Verify that the amount extraction is not triggered.
   EXPECT_CALL(amount_extraction_manager(), TriggerCheckoutAmountExtraction)
@@ -3678,7 +3678,7 @@
        OnFormsSeen_AutofillDisabledPasswordManagerEnabled) {
   // Set up our form data.
   FormData form = CreateTestAddressFormData();
-  autofill_client().SetAutofillPaymentMethodsEnabled(false);
+  payments_client().SetAutofillPaymentMethodsEnabled(false);
   autofill_client().SetAutofillProfileEnabled(false);
   // If the password manager is enabled, that's enough to parse the form.
   EXPECT_CALL(crowdsourcing_manager(), StartQueryRequest).Times(AnyNumber());
@@ -4176,7 +4176,7 @@
       *autofill_client().GetPaymentsAutofillClient()->GetSaveAndFillManager(),
       MaybeAddStrikeForSaveAndFill());
 
-  autofill_client().SetAutofillPaymentMethodsEnabled(true);
+  payments_client().SetAutofillPaymentMethodsEnabled(true);
   FormData form =
       CreateTestCreditCardFormData(/*is_https=*/true, /*use_month_type=*/false);
   FormsSeen({form});
@@ -5029,7 +5029,7 @@
 // submissions are still received by the SingleFieldFillRouter.
 TEST_F(BrowserAutofillManagerTest, FormSubmittedAutocompleteEnabled) {
   autofill_client().SetAutofillProfileEnabled(false);
-  autofill_client().SetAutofillPaymentMethodsEnabled(false);
+  payments_client().SetAutofillPaymentMethodsEnabled(false);
 
   // Set up our form data.
   FormData form = CreateTestAddressFormData();
@@ -5069,7 +5069,7 @@
 TEST_F(BrowserAutofillManagerTest,
        SingleFieldFillSuggestions_SomeWhenAutofillDisabled) {
   autofill_client().SetAutofillProfileEnabled(false);
-  autofill_client().SetAutofillPaymentMethodsEnabled(false);
+  payments_client().SetAutofillPaymentMethodsEnabled(false);
 
   // Set up our form data.
   FormData form = CreateTestAddressFormData();
@@ -5137,7 +5137,9 @@
     autofill_client().set_last_committed_primary_main_frame_url(
         GURL("http://example.test"));
     autofill_client().SetAutofillProfileEnabled(false);
-    autofill_client().SetAutofillPaymentMethodsEnabled(false);
+    autofill_client()
+        .GetPaymentsAutofillClient()
+        ->SetAutofillPaymentMethodsEnabled(false);
   }
 };
 
@@ -5204,7 +5206,7 @@
 TEST_F(BrowserAutofillManagerTest,
        SingleFieldFillSuggestions_NoneWhenSingleFieldFillConditionsNotMet) {
   autofill_client().SetAutofillProfileEnabled(false);
-  autofill_client().SetAutofillPaymentMethodsEnabled(false);
+  payments_client().SetAutofillPaymentMethodsEnabled(false);
 
   // Set up our form data.
   FormData form = CreateTestAddressFormData();
@@ -6036,7 +6038,7 @@
 }
 
 TEST_F(BrowserAutofillManagerTest, CreditCardDisabledDoesNotSuggest) {
-  autofill_client().SetAutofillPaymentMethodsEnabled(false);
+  payments_client().SetAutofillPaymentMethodsEnabled(false);
 
   // Set up our form data.
   FormData form =
@@ -6110,7 +6112,7 @@
 
   // Autofill disabled.
   autofill_client().SetAutofillProfileEnabled(false);
-  autofill_client().SetAutofillPaymentMethodsEnabled(false);
+  payments_client().SetAutofillPaymentMethodsEnabled(false);
   EXPECT_FALSE(autofill_manager().ShouldUploadForm(FormStructure(form)));
 }
 
@@ -7415,12 +7417,12 @@
   ASSERT_EQ(card_number_field.name(), u"cardnumber");
 
   // Test case where autofill is enabled.
-  autofill_client().SetAutofillPaymentMethodsEnabled(true);
+  payments_client().SetAutofillPaymentMethodsEnabled(true);
   EXPECT_TRUE(test_api(autofill_manager())
                   .ShouldShowScanCreditCard(form_structure, card_number_field));
 
   // Test case where autofill is disabled.
-  autofill_client().SetAutofillPaymentMethodsEnabled(false);
+  payments_client().SetAutofillPaymentMethodsEnabled(false);
   EXPECT_FALSE(
       test_api(autofill_manager())
           .ShouldShowScanCreditCard(form_structure, card_number_field));
diff --git a/components/autofill/core/browser/foundations/test_autofill_client.h b/components/autofill/core/browser/foundations/test_autofill_client.h
index 849634a..7c1b346 100644
--- a/components/autofill/core/browser/foundations/test_autofill_client.h
+++ b/components/autofill/core/browser/foundations/test_autofill_client.h
@@ -375,17 +375,15 @@
   }
 
   bool IsAutofillEnabled() const override {
-    return IsAutofillProfileEnabled() || IsAutofillPaymentMethodsEnabled();
+    return IsAutofillProfileEnabled() ||
+           AutofillClient::GetPaymentsAutofillClient()
+               ->IsAutofillPaymentMethodsEnabled();
   }
 
   bool IsAutofillProfileEnabled() const override {
     return autofill_profile_enabled_;
   }
 
-  bool IsAutofillPaymentMethodsEnabled() const override {
-    return autofill_payment_methods_enabled_;
-  }
-
   bool IsWalletStorageEnabled() const override {
     return wallet_storage_enabled_;
   }
@@ -497,18 +495,6 @@
     }
   }
 
-  void SetAutofillPaymentMethodsEnabled(bool autofill_payment_methods_enabled) {
-    autofill_payment_methods_enabled_ = autofill_payment_methods_enabled;
-    if (PrefService* prefs = GetPrefs()) {
-      prefs->SetBoolean(prefs::kAutofillCreditCardEnabled,
-                        autofill_payment_methods_enabled);
-    }
-    if (!autofill_payment_methods_enabled) {
-      // Credit card data is refreshed when this pref is changed.
-      GetPersonalDataManager().test_payments_data_manager().ClearCreditCards();
-    }
-  }
-
   void SetWalletStorageEnabled(bool wallet_storage_enabled) {
     wallet_storage_enabled_ = wallet_storage_enabled;
   }
@@ -723,7 +709,6 @@
 #endif
 
   bool autofill_profile_enabled_ = true;
-  bool autofill_payment_methods_enabled_ = true;
   bool wallet_storage_enabled_ = true;
 
   // NULL by default.
diff --git a/components/autofill/core/browser/metrics/autofill_settings_metrics_unittest.cc b/components/autofill/core/browser/metrics/autofill_settings_metrics_unittest.cc
index 5be72f4..5b4dc20 100644
--- a/components/autofill/core/browser/metrics/autofill_settings_metrics_unittest.cc
+++ b/components/autofill/core/browser/metrics/autofill_settings_metrics_unittest.cc
@@ -72,7 +72,7 @@
 // Test that we log that CreditCard Autofill is enabled / disabled when filling
 // a form.
 TEST_P(AutofillSettingsMetricsTest, AutofillCreditCardIsEnabledAtPageLoad) {
-  autofill_client().SetAutofillPaymentMethodsEnabled(GetParam());
+  payments_autofill_client().SetAutofillPaymentMethodsEnabled(GetParam());
   autofill_manager().OnFormsSeen(/*updated_forms=*/{},
                                  /*removed_forms=*/{});
   histogram_tester_.ExpectUniqueSample("Autofill.CreditCard.IsEnabled.PageLoad",
@@ -326,7 +326,7 @@
 // load.
 TEST_P(AutofillSettingsMetricsTest,
        EmitsAutofillPaymentMethodsDisabledByUserAtPageLoad) {
-  autofill_client().SetAutofillPaymentMethodsEnabled(GetParam());
+  payments_autofill_client().SetAutofillPaymentMethodsEnabled(GetParam());
   autofill_client().GetPrefs()->SetUserPref(prefs::kAutofillCreditCardEnabled,
                                             base::Value(GetParam()));
 
@@ -342,7 +342,7 @@
 // load.
 TEST_P(AutofillSettingsMetricsTest,
        EmitsAutofillPaymentMethodsDisabledByAdminPolicyAtPageLoad) {
-  autofill_client().SetAutofillPaymentMethodsEnabled(GetParam());
+  payments_autofill_client().SetAutofillPaymentMethodsEnabled(GetParam());
   autofill_client().GetPrefs()->SetManagedPref(
       prefs::kAutofillCreditCardEnabled, base::Value(GetParam()));
 
@@ -358,7 +358,7 @@
 // load.
 TEST_P(AutofillSettingsMetricsTest,
        EmitsAutofillPaymentMethodsDisabledByExtensionAtPageLoad) {
-  autofill_client().SetAutofillPaymentMethodsEnabled(GetParam());
+  payments_autofill_client().SetAutofillPaymentMethodsEnabled(GetParam());
   autofill_client().GetPrefs()->SetExtensionPref(
       prefs::kAutofillCreditCardEnabled, base::Value(GetParam()));
 
@@ -374,7 +374,7 @@
 // load.
 TEST_P(AutofillSettingsMetricsTest,
        EmitsAutofillPaymentMethodsDisabledByCustodianAtPageLoad) {
-  autofill_client().SetAutofillPaymentMethodsEnabled(GetParam());
+  payments_autofill_client().SetAutofillPaymentMethodsEnabled(GetParam());
   autofill_client().GetPrefs()->SetSupervisedUserPref(
       prefs::kAutofillCreditCardEnabled, base::Value(GetParam()));
 
diff --git a/components/autofill/core/browser/payments/amount_extraction_manager_unittest.cc b/components/autofill/core/browser/payments/amount_extraction_manager_unittest.cc
index 291a369..43d0d26 100644
--- a/components/autofill/core/browser/payments/amount_extraction_manager_unittest.cc
+++ b/components/autofill/core/browser/payments/amount_extraction_manager_unittest.cc
@@ -114,7 +114,9 @@
  protected:
   void SetUp() override {
     InitAutofillClient();
-    autofill_client().SetAutofillPaymentMethodsEnabled(true);
+    autofill_client()
+        .GetPaymentsAutofillClient()
+        ->SetAutofillPaymentMethodsEnabled(true);
     autofill_client()
         .GetPersonalDataManager()
         .payments_data_manager()
diff --git a/components/autofill/core/browser/payments/bnpl_manager_unittest.cc b/components/autofill/core/browser/payments/bnpl_manager_unittest.cc
index d149912..9281c5c 100644
--- a/components/autofill/core/browser/payments/bnpl_manager_unittest.cc
+++ b/components/autofill/core/browser/payments/bnpl_manager_unittest.cc
@@ -241,7 +241,6 @@
   void SetUp() override {
     InitAutofillClient();
     autofill_client().set_app_locale(kAppLocale);
-    autofill_client().SetAutofillPaymentMethodsEnabled(true);
     autofill_client().set_last_committed_primary_main_frame_url(kDomain);
     autofill_client().GetPersonalDataManager().set_payments_data_manager(
         std::make_unique<TestPaymentsDataManager>());
@@ -269,6 +268,10 @@
         .GetPaymentsAutofillClient()
         ->set_payments_network_interface(std::move(payments_network_interface));
 
+    autofill_client()
+        .GetPaymentsAutofillClient()
+        ->SetAutofillPaymentMethodsEnabled(true);
+
     autofill_client().GetPaymentsAutofillClient()->set_bnpl_ui_delegate(
         std::make_unique<NiceMock<MockBnplUiDelegate>>());
 
diff --git a/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc b/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc
index 0f806af..c3c11013 100644
--- a/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc
+++ b/components/autofill/core/browser/payments/credit_card_save_manager_unittest.cc
@@ -638,7 +638,7 @@
 }
 
 TEST_F(CreditCardSaveManagerTest, CreditCardDisabledDoesNotSave) {
-  autofill_client().SetAutofillPaymentMethodsEnabled(false);
+  payments_client().SetAutofillPaymentMethodsEnabled(false);
   // Create, fill and submit an address form in order to establish a recent
   // profile which can be selected for the upload request.
   FormData address_form = CreateTestAddressFormData();
diff --git a/components/autofill/core/browser/payments/payments_autofill_client.h b/components/autofill/core/browser/payments/payments_autofill_client.h
index 766c35a..302530a3 100644
--- a/components/autofill/core/browser/payments/payments_autofill_client.h
+++ b/components/autofill/core/browser/payments/payments_autofill_client.h
@@ -568,6 +568,10 @@
   // was accepted, this will display the re-auth opt-in confirmation bubble.
   virtual void ShowMandatoryReauthOptInConfirmation() = 0;
 
+  // Returns true if the value of the AutofillCreditCardEnabled pref is true
+  // and the client supports Autofill.
+  virtual bool IsAutofillPaymentMethodsEnabled() const = 0;
+
   // Gets the IbanManager instance associated with the client.
   virtual IbanManager* GetIbanManager() = 0;
 
diff --git a/components/autofill/core/browser/payments/test_payments_autofill_client.cc b/components/autofill/core/browser/payments/test_payments_autofill_client.cc
index cff59ce1..669303e3 100644
--- a/components/autofill/core/browser/payments/test_payments_autofill_client.cc
+++ b/components/autofill/core/browser/payments/test_payments_autofill_client.cc
@@ -29,6 +29,7 @@
 #include "components/autofill/core/browser/suggestions/suggestion.h"
 #include "components/autofill/core/browser/test_utils/autofill_test_utils.h"
 #include "components/autofill/core/browser/ui/payments/bnpl_ui_delegate.h"
+#include "components/autofill/core/common/autofill_prefs.h"
 
 #if BUILDFLAG(IS_ANDROID)
 #include "base/test/gmock_callback_support.h"
@@ -321,6 +322,10 @@
   mandatory_reauth_opt_in_prompt_was_reshown_ = true;
 }
 
+bool TestPaymentsAutofillClient::IsAutofillPaymentMethodsEnabled() const {
+  return autofill_payment_methods_enabled_;
+}
+
 MockIbanManager* TestPaymentsAutofillClient::GetIbanManager() {
   if (!mock_iban_manager_) {
     mock_iban_manager_ = std::make_unique<NiceMock<MockIbanManager>>(
diff --git a/components/autofill/core/browser/payments/test_payments_autofill_client.h b/components/autofill/core/browser/payments/test_payments_autofill_client.h
index 640602116..d1e7f486 100644
--- a/components/autofill/core/browser/payments/test_payments_autofill_client.h
+++ b/components/autofill/core/browser/payments/test_payments_autofill_client.h
@@ -11,6 +11,7 @@
 #include "base/functional/callback.h"
 #include "base/memory/raw_ref.h"
 #include "build/build_config.h"
+#include "components/autofill/core/browser/data_manager/test_personal_data_manager.h"
 #include "components/autofill/core/browser/data_model/payments/credit_card.h"
 #include "components/autofill/core/browser/data_model/payments/iban.h"
 #include "components/autofill/core/browser/payments/autofill_error_dialog_context.h"
@@ -30,6 +31,7 @@
 #include "components/autofill/core/browser/suggestions/suggestion.h"
 #include "components/autofill/core/browser/ui/payments/bnpl_tos_controller.h"
 #include "components/autofill/core/browser/ui/payments/bnpl_ui_delegate.h"
+#include "components/autofill/core/common/autofill_prefs.h"
 
 #if !BUILDFLAG(IS_IOS)
 namespace webauthn {
@@ -170,6 +172,7 @@
       base::OnceClosure cancel_mandatory_reauth_callback,
       base::RepeatingClosure close_mandatory_reauth_callback) override;
   void ShowMandatoryReauthOptInConfirmation() override;
+  bool IsAutofillPaymentMethodsEnabled() const final;
   MockIbanManager* GetIbanManager() override;
   MockIbanAccessManager* GetIbanAccessManager() override;
   MockMerchantPromoCodeManager* GetMerchantPromoCodeManager() override;
@@ -224,6 +227,20 @@
 
   // Begin TestPaymentsAutofillClient-specific section.
 
+  void SetAutofillPaymentMethodsEnabled(bool autofill_payment_methods_enabled) {
+    autofill_payment_methods_enabled_ = autofill_payment_methods_enabled;
+    if (PrefService* prefs = client_->GetPrefs()) {
+      prefs->SetBoolean(prefs::kAutofillCreditCardEnabled,
+                        autofill_payment_methods_enabled);
+    }
+    if (!autofill_payment_methods_enabled) {
+      // Credit card data is refreshed when this pref is changed.
+      static_cast<TestPersonalDataManager&>(client_->GetPersonalDataManager())
+          .test_payments_data_manager()
+          .ClearCreditCards();
+    }
+  }
+
   bool GetMandatoryReauthOptInPromptWasShown();
 
   bool GetMandatoryReauthOptInPromptWasReshown();
@@ -383,6 +400,8 @@
 
   bool unmask_authenticator_selection_dialog_shown_ = false;
 
+  bool autofill_payment_methods_enabled_ = true;
+
   std::unique_ptr<MockIbanManager> mock_iban_manager_;
 
   std::unique_ptr<MockIbanAccessManager> mock_iban_access_manager_;
diff --git a/components/autofill/core/browser/suggestions/payments/credit_card_suggestion_generator.cc b/components/autofill/core/browser/suggestions/payments/credit_card_suggestion_generator.cc
index e755b4a..219a487 100644
--- a/components/autofill/core/browser/suggestions/payments/credit_card_suggestion_generator.cc
+++ b/components/autofill/core/browser/suggestions/payments/credit_card_suggestion_generator.cc
@@ -102,7 +102,7 @@
         void(std::pair<SuggestionDataSource,
                        std::vector<SuggestionGenerator::SuggestionData>>)>
         callback) {
-  if (!client.IsAutofillPaymentMethodsEnabled()) {
+  if (!client.GetPaymentsAutofillClient()->IsAutofillPaymentMethodsEnabled()) {
     callback({SuggestionDataSource::kCreditCard, {}});
     return;
   }
@@ -331,8 +331,10 @@
     const FormData& form,
     const FormFieldData& trigger_field,
     const AutofillField* trigger_autofill_field) {
-  if (!client.GetPaymentsAutofillClient()->HasCreditCardScanFeature() ||
-      !client.IsAutofillPaymentMethodsEnabled()) {
+  const payments::PaymentsAutofillClient& payments_client =
+      *client.GetPaymentsAutofillClient();
+  if (!payments_client.HasCreditCardScanFeature() ||
+      !payments_client.IsAutofillPaymentMethodsEnabled()) {
     return false;
   }
 
diff --git a/components/browser_apis/tab_strip/tab_strip_api_data_model.mojom b/components/browser_apis/tab_strip/tab_strip_api_data_model.mojom
index d206f07..3de6b407 100644
--- a/components/browser_apis/tab_strip/tab_strip_api_data_model.mojom
+++ b/components/browser_apis/tab_strip/tab_strip_api_data_model.mojom
@@ -23,6 +23,7 @@
   kBluetoothScanActive,
   kDesktopCapturing,
   kActorAccessing,
+  kActorWaitingOnUser,
   kGlicAccessing,
   kGlicSharing,
   kHidConnected,
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/InlineSearchBox.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/InlineSearchBox.java
index 785c00d5..b630cc9 100644
--- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/InlineSearchBox.java
+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/InlineSearchBox.java
@@ -184,7 +184,7 @@
         return !TextUtils.isEmpty(mInlineSearchEditText.getText());
     }
 
-    public EditText getSearchTextForTest() {
+    public EditText getSearchText() {
         return mInlineSearchEditText;
     }
 
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableListToolbar.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableListToolbar.java
index aedec413..9a54929 100644
--- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableListToolbar.java
+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/selectable_list/SelectableListToolbar.java
@@ -845,7 +845,9 @@
 
     /** Hides the keyboard. */
     public void hideKeyboard() {
-        KeyboardVisibilityDelegate.getInstance().hideKeyboard(mSearchEditText);
+        View searchText =
+                mIsLargeScreenWithKeyboard ? mInlineSearchBox.getSearchText() : mSearchEditText;
+        KeyboardVisibilityDelegate.getInstance().hideKeyboard(searchText);
     }
 
     @Override
@@ -936,6 +938,6 @@
     }
 
     public EditText getSearchTextForTest() {
-        return mInlineSearchBox.getSearchTextForTest(); // IN-TEST
+        return mInlineSearchBox.getSearchText(); // IN-TEST
     }
 }
diff --git a/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc b/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc
index 8eb0408d..a3da35f7 100644
--- a/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc
+++ b/components/chromeos_camera/jpeg_encode_accelerator_unittest.cc
@@ -22,6 +22,7 @@
 #include "base/files/file_util.h"
 #include "base/functional/bind.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/path_service.h"
diff --git a/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc b/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc
index 4dc65df..c4bd23c 100644
--- a/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc
+++ b/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc
@@ -30,6 +30,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/raw_ref.h"
 #include "base/memory/read_only_shared_memory_region.h"
diff --git a/components/contextual_tasks/public/features.cc b/components/contextual_tasks/public/features.cc
index 3e9172c6..98b4b8f 100644
--- a/components/contextual_tasks/public/features.cc
+++ b/components/contextual_tasks/public/features.cc
@@ -44,6 +44,18 @@
                                                      "TaskScopedSidpePanel",
                                                      true);
 
+constexpr base::FeatureParam<EntryPointOption>::Option kEntryPointOptions[] = {
+    {EntryPointOption::kNoEntryPoint, "no-entry-point"},
+    {EntryPointOption::kPageActionRevisit, "page-action-revisit"},
+    {EntryPointOption::kToolbarRevisit, "toolbar-revisit"},
+    {EntryPointOption::kToolbarPermanent, "toolbar-permanent"}};
+
+const base::FeatureParam<EntryPointOption> kShowEntryPoint(
+    &kContextualTasks,
+    "ContextualTasksEntryPoint",
+    EntryPointOption::kNoEntryPoint,
+    &kEntryPointOptions);
+
 std::string GetContextualTasksAiPageUrl() {
   return kContextualTasksAiPageUrl.Get();
 }
diff --git a/components/contextual_tasks/public/features.h b/components/contextual_tasks/public/features.h
index 8f2836c..c446e8d 100644
--- a/components/contextual_tasks/public/features.h
+++ b/components/contextual_tasks/public/features.h
@@ -16,10 +16,20 @@
 BASE_DECLARE_FEATURE(kContextualTasks);
 BASE_DECLARE_FEATURE(kContextualTasksContext);
 
+// Enum denoting which entry point can show when enabled.
+enum class EntryPointOption {
+  kNoEntryPoint,
+  kPageActionRevisit,
+  kToolbarRevisit,
+  kToolbarPermanent
+};
+
 // The minimum score required for two embeddings to be considered similar.
 extern const base::FeatureParam<double> kMinEmbeddingSimilarityScore;
 // Whether to only consider titles for similarity.
 extern const base::FeatureParam<bool> kOnlyUseTitlesForSimilarity;
+// Controls whether the contextual task page action should show
+extern const base::FeatureParam<EntryPointOption, true> kShowEntryPoint;
 
 // Minimum score, computed using multiple signals, to consider a tab relevant.
 extern const base::FeatureParam<double> kMinMultiSignalScore;
diff --git a/components/cronet/android/cronet_library_loader.cc b/components/cronet/android/cronet_library_loader.cc
index ad007ca..5b46d84 100644
--- a/components/cronet/android/cronet_library_loader.cc
+++ b/components/cronet/android/cronet_library_loader.cc
@@ -22,6 +22,7 @@
 #include "base/android/library_loader/library_loader_hooks.h"
 #include "base/check_op.h"
 #include "base/feature_list.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/no_destructor.h"
diff --git a/components/embedder_support/android/BUILD.gn b/components/embedder_support/android/BUILD.gn
index f1812beb..38610e3 100644
--- a/components/embedder_support/android/BUILD.gn
+++ b/components/embedder_support/android/BUILD.gn
@@ -433,6 +433,7 @@
     ":virtual_structure_java",
     "//base:base_java",
     "//base:base_java_test_support",
+    "//chrome/android:chrome_java",
     "//chrome/browser/flags:java",
     "//chrome/browser/tab:java",
     "//chrome/test/android:chrome_java_test_support_common",
diff --git a/components/embedder_support/android/javatests/src/org/chromium/components/embedder_support/virtual_structure/PageContentProtoViewStructureBuilderTest.java b/components/embedder_support/android/javatests/src/org/chromium/components/embedder_support/virtual_structure/PageContentProtoViewStructureBuilderTest.java
index fc8365a..7aa99cc 100644
--- a/components/embedder_support/android/javatests/src/org/chromium/components/embedder_support/virtual_structure/PageContentProtoViewStructureBuilderTest.java
+++ b/components/embedder_support/android/javatests/src/org/chromium/components/embedder_support/virtual_structure/PageContentProtoViewStructureBuilderTest.java
@@ -16,10 +16,10 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.ApplicationTestUtils;
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.CriteriaHelper;
-import org.chromium.base.test.util.Features.DisableFeatures;
 import org.chromium.base.test.util.Features.EnableFeatures;
 import org.chromium.build.annotations.Nullable;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
@@ -37,10 +37,7 @@
 })
 @Batch(Batch.PER_CLASS)
 @EnableFeatures({"AnnotatedPageContentsVirtualStructure"})
-// TODO(crbug.com/439491767): Fix broken tests caused by desktop-like incognito window.
-@DisableFeatures("AndroidOpenIncognitoAsWindow")
 public class PageContentProtoViewStructureBuilderTest {
-
     private static final String TEST_PATH =
             "/chrome/test/data/android/annotated_page_content/index.html";
     private static final long DEFAULT_MAX_TIME_TO_WAIT_IN_MS = 3000;
@@ -71,7 +68,7 @@
         var incognitoPage =
                 mActivityTestRule
                         .startOnBlankPage()
-                        .openNewIncognitoTabFast()
+                        .openNewIncognitoTabOrWindowFast()
                         .loadWebPageProgrammatically(testUrl);
         var viewStructure = getViewStructureForPage(incognitoPage);
 
@@ -82,6 +79,10 @@
                             .getExtras()
                             .containsKey(PageContentProtoViewStructureBuilder.APC_PROTO_EXTRA_KEY));
         }
+
+        if (incognitoPage.getActivity().isIncognitoWindow()) {
+            ApplicationTestUtils.finishActivity(incognitoPage.getActivity());
+        }
     }
 
     @Test
diff --git a/components/enterprise/connectors/core/connectors_manager_base.cc b/components/enterprise/connectors/core/connectors_manager_base.cc
index aaeb412..fc5390d 100644
--- a/components/enterprise/connectors/core/connectors_manager_base.cc
+++ b/components/enterprise/connectors/core/connectors_manager_base.cc
@@ -245,6 +245,11 @@
   }
 }
 
+void ConnectorsManagerBase::SetTelemetryObserverCallback(
+    base::RepeatingCallback<void()> callback) {
+  telemetry_observer_callback_ = callback;
+}
+
 const std::vector<ReportingServiceSettings>&
 ConnectorsManagerBase::GetReportingConnectorsSettingsForTesting() const {
   return reporting_connector_settings_;
@@ -255,4 +260,9 @@
   return analysis_connector_settings_;
 }
 
+const base::RepeatingCallback<void()>
+ConnectorsManagerBase::GetTelemetryObserverCallbackForTesting() const {
+  return telemetry_observer_callback_;
+}
+
 }  // namespace enterprise_connectors
diff --git a/components/enterprise/connectors/core/connectors_manager_base.h b/components/enterprise/connectors/core/connectors_manager_base.h
index f5c9bee..eae06057 100644
--- a/components/enterprise/connectors/core/connectors_manager_base.h
+++ b/components/enterprise/connectors/core/connectors_manager_base.h
@@ -36,6 +36,17 @@
 
   virtual ~ConnectorsManagerBase();
 
+  // Checks if the corresponding connector is enabled.
+  bool IsReportingConnectorEnabled() const;
+
+  // Checks if the corresponding connector is enabled.
+  bool IsAnalysisConnectorEnabled(AnalysisConnector connector) const;
+
+  bool DelayUntilVerdict(AnalysisConnector connector);
+
+  bool GetBypassJustificationRequired(AnalysisConnector connector,
+                                      const std::string& tag);
+
   // Validates which settings should be applied to an analysis connector event
   // against cached policies. This function will prioritize new connector
   // policies over legacy ones if they are set.
@@ -48,28 +59,13 @@
   // called for every different connector.
   std::optional<ReportingSettings> GetReportingSettings();
 
-  // Checks if the corresponding connector is enabled.
-  bool IsReportingConnectorEnabled() const;
-
-  std::vector<std::string> GetReportingServiceProviderNames();
-
-  // Public testing function.
-  const std::vector<ReportingServiceSettings>&
-  GetReportingConnectorsSettingsForTesting() const;
-
-  // Checks if the corresponding connector is enabled.
-  bool IsAnalysisConnectorEnabled(AnalysisConnector connector) const;
-
-  bool DelayUntilVerdict(AnalysisConnector connector);
-
   std::optional<std::u16string> GetCustomMessage(AnalysisConnector connector,
                                                  const std::string& tag);
 
   std::optional<GURL> GetLearnMoreUrl(AnalysisConnector connector,
                                       const std::string& tag);
 
-  bool GetBypassJustificationRequired(AnalysisConnector connector,
-                                      const std::string& tag);
+  std::vector<std::string> GetReportingServiceProviderNames();
 
   std::vector<std::string> GetAnalysisServiceProviderNames(
       AnalysisConnector connector);
@@ -77,21 +73,30 @@
   std::vector<const AnalysisConfig*> GetAnalysisServiceConfigs(
       AnalysisConnector connector);
 
+  void SetTelemetryObserverCallback(base::RepeatingCallback<void()> callback);
+
   // Public testing functions.
+  const std::vector<ReportingServiceSettings>&
+  GetReportingConnectorsSettingsForTesting() const;
+
   const AnalysisConnectorsSettings& GetAnalysisConnectorsSettingsForTesting()
       const;
 
+  const base::RepeatingCallback<void()> GetTelemetryObserverCallbackForTesting()
+      const;
+
  protected:
   // Read and cache the policy corresponding to |connector|.
   virtual void CacheAnalysisConnectorPolicy(
       AnalysisConnector connector) const = 0;
 
+  virtual DataRegion GetDataRegion(AnalysisConnector connector) const = 0;
+
   // Sets up |pref_change_registrar_|. Used by the constructor and
   // SetUpForTesting.
   virtual void StartObservingPrefs(PrefService* pref_service);
   void StartObservingPref();
 
-  virtual DataRegion GetDataRegion(AnalysisConnector connector) const = 0;
 
   const PrefService* prefs() const { return pref_change_registrar_.prefs(); }
 
@@ -109,9 +114,13 @@
   base::RepeatingCallback<void()> telemetry_observer_callback_;
 
   // Cached values of the connector policies. Updated when a connector is first
-  // used or when a policy is updated.  Analysis connectors settings are
-  // mutable because they maybe updated by a call to IsConnectorEnabled(),
-  // which is a const method.
+  // used or when a policy is updated.
+  //
+  // This member is `mutable` to enable lazy initialization of the cache within
+  // `const` member functions (e.g. `IsAnalysisConnectorEnabled`). This allows
+  // methods that are logically read-only to physically modify the internal
+  // cache for efficiency without violating const-correctness from the caller's
+  // perspective.
   mutable AnalysisConnectorsSettings analysis_connector_settings_;
 
  private:
diff --git a/components/enterprise/connectors/core/connectors_service_base.cc b/components/enterprise/connectors/core/connectors_service_base.cc
index 6de645c..f73bd06 100644
--- a/components/enterprise/connectors/core/connectors_service_base.cc
+++ b/components/enterprise/connectors/core/connectors_service_base.cc
@@ -15,6 +15,17 @@
 
 namespace enterprise_connectors {
 
+ConnectorsServiceBase::ConnectorsServiceBase(
+    std::unique_ptr<ConnectorsManagerBase> manager)
+    : connectors_manager_base_(std::move(manager)) {
+  DCHECK(connectors_manager_base_);
+}
+
+ConnectorsServiceBase::ConnectorsServiceBase(ConnectorsServiceBase&&) = default;
+ConnectorsServiceBase& ConnectorsServiceBase::operator=(
+    ConnectorsServiceBase&&) = default;
+ConnectorsServiceBase::~ConnectorsServiceBase() = default;
+
 ConnectorsServiceBase::DmToken::DmToken(const std::string& value,
                                         policy::PolicyScope scope)
     : value(value), scope(scope) {}
@@ -80,7 +91,7 @@
     return {};
   }
 
-  return GetConnectorsManagerBase()->GetReportingServiceProviderNames();
+  return connectors_manager_base_->GetReportingServiceProviderNames();
 }
 
 std::optional<ReportingSettings> ConnectorsServiceBase::GetReportingSettings() {
@@ -89,7 +100,7 @@
   }
 
   std::optional<ReportingSettings> settings =
-      GetConnectorsManagerBase()->GetReportingSettings();
+      connectors_manager_base_->GetReportingSettings();
   if (!settings.has_value()) {
     return std::nullopt;
   }
@@ -152,4 +163,84 @@
   }
 }
 
+bool ConnectorsServiceBase::IsConnectorEnabled(
+    AnalysisConnector connector) const {
+  if (!ConnectorsEnabled()) {
+    return false;
+  }
+
+  return connectors_manager_base_->IsAnalysisConnectorEnabled(connector);
+}
+
+std::vector<const AnalysisConfig*>
+ConnectorsServiceBase::GetAnalysisServiceConfigs(AnalysisConnector connector) {
+  if (!ConnectorsEnabled()) {
+    return {};
+  }
+
+  return connectors_manager_base_->GetAnalysisServiceConfigs(connector);
+}
+
+bool ConnectorsServiceBase::DelayUntilVerdict(AnalysisConnector connector) {
+  if (!ConnectorsEnabled()) {
+    return false;
+  }
+
+  return connectors_manager_base_->DelayUntilVerdict(connector);
+}
+
+std::optional<std::u16string> ConnectorsServiceBase::GetCustomMessage(
+    AnalysisConnector connector,
+    const std::string& tag) {
+  if (!ConnectorsEnabled()) {
+    return std::nullopt;
+  }
+
+  return connectors_manager_base_->GetCustomMessage(connector, tag);
+}
+
+std::optional<GURL> ConnectorsServiceBase::GetLearnMoreUrl(
+    AnalysisConnector connector,
+    const std::string& tag) {
+  if (!ConnectorsEnabled()) {
+    return std::nullopt;
+  }
+
+  return connectors_manager_base_->GetLearnMoreUrl(connector, tag);
+}
+
+bool ConnectorsServiceBase::GetBypassJustificationRequired(
+    AnalysisConnector connector,
+    const std::string& tag) {
+  if (!ConnectorsEnabled()) {
+    return false;
+  }
+
+  return connectors_manager_base_->GetBypassJustificationRequired(connector,
+                                                                  tag);
+}
+
+void ConnectorsServiceBase::ObserveTelemetryReporting(
+    base::RepeatingCallback<void()> callback) {
+  connectors_manager_base_->SetTelemetryObserverCallback(callback);
+}
+
+std::vector<std::string> ConnectorsServiceBase::GetAnalysisServiceProviderNames(
+    AnalysisConnector connector) {
+  if (!ConnectorsEnabled()) {
+    return {};
+  }
+
+  if (!GetDmToken(AnalysisConnectorScopePref(connector)).has_value()) {
+    return {};
+  }
+
+  return connectors_manager_base_->GetAnalysisServiceProviderNames(connector);
+}
+
+ConnectorsManagerBase*
+ConnectorsServiceBase::ConnectorsManagerBaseForTesting() {
+  return connectors_manager_base_.get();
+}
+
 }  // namespace enterprise_connectors
diff --git a/components/enterprise/connectors/core/connectors_service_base.h b/components/enterprise/connectors/core/connectors_service_base.h
index e3b1284c..180cb5b 100644
--- a/components/enterprise/connectors/core/connectors_service_base.h
+++ b/components/enterprise/connectors/core/connectors_service_base.h
@@ -35,6 +35,12 @@
     kMaxValue = kNoDmToken,
   };
 
+  explicit ConnectorsServiceBase(
+      std::unique_ptr<ConnectorsManagerBase> manager);
+  ConnectorsServiceBase(ConnectorsServiceBase&&);
+  ConnectorsServiceBase& operator=(ConnectorsServiceBase&&);
+  virtual ~ConnectorsServiceBase();
+
   // DM token accessor function for real-time URL checks. Returns a profile or
   // browser DM token depending on the policy scope. If there is no token to
   // use, returns the reason why.
@@ -50,24 +56,50 @@
   std::optional<policy::PolicyScope> GetRealtimeUrlCheckScope() const;
 
   // Returns whether the Connectors are enabled.
-  virtual bool IsConnectorEnabled(AnalysisConnector connector) const = 0;
+  virtual bool IsConnectorEnabled(AnalysisConnector connector) const;
+
+  bool DelayUntilVerdict(AnalysisConnector connector);
+
+  // Returns true if the admin enabled Bypass Justification.
+  bool GetBypassJustificationRequired(AnalysisConnector connector,
+                                      const std::string& tag);
 
   std::vector<std::string> GetReportingServiceProviderNames();
 
+  std::vector<const AnalysisConfig*> GetAnalysisServiceConfigs(
+      AnalysisConnector connector);
+
+  std::vector<std::string> GetAnalysisServiceProviderNames(
+      AnalysisConnector connector);
+
   virtual std::optional<ReportingSettings> GetReportingSettings();
 
   virtual std::optional<std::string> GetBrowserDmToken() const = 0;
 
+  // Gets custom message if set by the admin.
+  std::optional<std::u16string> GetCustomMessage(AnalysisConnector connector,
+                                                 const std::string& tag);
+
+  // Gets custom learn more URL if provided by the admin.
+  std::optional<GURL> GetLearnMoreUrl(AnalysisConnector connector,
+                                      const std::string& tag);
+
   // Obtain a ClientMetadata instance corresponding to the current
   // OnSecurityEvent policy value.  `is_cloud` is true when using a cloud-
   // based service provider and false when using a local service provider.
   virtual std::unique_ptr<ClientMetadata> BuildClientMetadata(
       bool is_cloud) = 0;
 
+  // Observe if reporting policies have changed to include telemetry event.
+  void ObserveTelemetryReporting(base::RepeatingCallback<void()> callback);
+
 #if !BUILDFLAG(IS_CHROMEOS)
   std::optional<std::string> GetProfileDmToken() const;
 #endif
 
+  // Testing functions.
+  ConnectorsManagerBase* ConnectorsManagerBaseForTesting();
+
  protected:
   struct DmToken {
     DmToken(const std::string& value, policy::PolicyScope scope);
@@ -98,11 +130,6 @@
   virtual PrefService* GetPrefs() = 0;
   virtual const PrefService* GetPrefs() const = 0;
 
-  // Returns the `ConnectorsManagerBase` that should be used by this class to
-  // return reporting connector related settings. Should never return nullptr.
-  virtual ConnectorsManagerBase* GetConnectorsManagerBase() = 0;
-  virtual const ConnectorsManagerBase* GetConnectorsManagerBase() const = 0;
-
   // Returns a `policy::CloudPolicyManager` corresponding to a managed user, if
   // one exists.
   virtual policy::CloudPolicyManager* GetManagedUserCloudPolicyManager()
@@ -112,6 +139,8 @@
                                ClientMetadata::Browser* browser_proto);
   void PopulateDeviceMetadata(const std::string& client_id,
                               ClientMetadata::Device* device_proto);
+
+  std::unique_ptr<ConnectorsManagerBase> connectors_manager_base_;
 };
 
 }  // namespace enterprise_connectors
diff --git a/components/enterprise/connectors/core/connectors_service_base_unittest.cc b/components/enterprise/connectors/core/connectors_service_base_unittest.cc
index cf5ff252..649aeac 100644
--- a/components/enterprise/connectors/core/connectors_service_base_unittest.cc
+++ b/components/enterprise/connectors/core/connectors_service_base_unittest.cc
@@ -40,7 +40,13 @@
 
 class TestConnectorsService : public ConnectorsServiceBase {
  public:
-  TestConnectorsService() { RegisterProfilePrefs(prefs_.registry()); }
+  explicit TestConnectorsService(TestingPrefServiceSimple* prefs)
+      : ConnectorsServiceBase(
+            std::make_unique<ConnectorsManager>(prefs,
+                                                GetServiceProviderConfig())),
+        prefs_(prefs) {
+    RegisterProfilePrefs(prefs_->registry());
+  }
 
   void set_machine_dm_token() {
     machine_dm_token_ = ConnectorsServiceBase::DmToken(
@@ -54,13 +60,8 @@
 
   void set_connectors_enabled(bool enabled) { connectors_enabled_ = enabled; }
 
-  void set_connectors_manager_base() {
-    connectors_manager_ = std::make_unique<ConnectorsManager>(
-        &prefs_, GetServiceProviderConfig());
-  }
-
   std::optional<DmToken> GetDmToken(const char* scope_pref) const override {
-    switch (prefs_.GetInteger(kEnterpriseRealTimeUrlCheckScope)) {
+    switch (prefs_->GetInteger(kEnterpriseRealTimeUrlCheckScope)) {
       case policy::POLICY_SCOPE_MACHINE:
         return machine_dm_token_;
       case policy::POLICY_SCOPE_USER:
@@ -80,19 +81,8 @@
 
   bool ConnectorsEnabled() const override { return connectors_enabled_; }
 
-  bool IsConnectorEnabled(AnalysisConnector connector) const override {
-    return false;
-  }
-
-  ConnectorsManagerBase* GetConnectorsManagerBase() override {
-    return connectors_manager_.get();
-  }
-  const ConnectorsManagerBase* GetConnectorsManagerBase() const override {
-    return connectors_manager_.get();
-  }
-
-  PrefService* GetPrefs() override { return &prefs_; }
-  const PrefService* GetPrefs() const override { return &prefs_; }
+  PrefService* GetPrefs() override { return prefs_; }
+  const PrefService* GetPrefs() const override { return prefs_; }
 
   policy::CloudPolicyManager* GetManagedUserCloudPolicyManager()
       const override {
@@ -104,14 +94,14 @@
   bool connectors_enabled_ = false;
   std::optional<DmToken> machine_dm_token_;
   std::optional<DmToken> profile_dm_token_;
-  TestingPrefServiceSimple prefs_;
-  std::unique_ptr<ConnectorsManager> connectors_manager_;
+  raw_ptr<TestingPrefServiceSimple> prefs_;
 };
 
 }  // namespace
 
 TEST(ConnectorsServiceBaseTest, RealTimeUrlCheck_NoTokenOrPolicies) {
-  TestConnectorsService service;
+  TestingPrefServiceSimple prefs;
+  TestConnectorsService service(&prefs);
 
   ASSERT_FALSE(service.GetDMTokenForRealTimeUrlCheck().has_value());
   ASSERT_EQ(service.GetDMTokenForRealTimeUrlCheck().error(),
@@ -129,7 +119,9 @@
 }
 
 TEST(ConnectorsServiceBaseTest, RealTimeUrlCheck_InvalidProfilePolicy) {
-  TestConnectorsService service;
+  TestingPrefServiceSimple prefs;
+  TestConnectorsService service(&prefs);
+
   service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckMode,
                                  REAL_TIME_CHECK_FOR_MAINFRAME_ENABLED);
   service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckScope,
@@ -159,7 +151,9 @@
 }
 
 TEST(ConnectorsServiceBaseTest, RealTimeUrlCheck_InvalidMachinePolicy) {
-  TestConnectorsService service;
+  TestingPrefServiceSimple prefs;
+  TestConnectorsService service(&prefs);
+
   service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckMode,
                                  REAL_TIME_CHECK_FOR_MAINFRAME_ENABLED);
   service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckScope,
@@ -189,7 +183,9 @@
 }
 
 TEST(ConnectorsServiceBaseTest, RealTimeUrlCheck_ValidProfilePolicy) {
-  TestConnectorsService service;
+  TestingPrefServiceSimple prefs;
+  TestConnectorsService service(&prefs);
+
   service.set_connectors_enabled(true);
   service.set_profile_dm_token();
   service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckMode,
@@ -204,7 +200,9 @@
 }
 
 TEST(ConnectorsServiceBaseTest, RealTimeUrlCheck_ValidMachinePolicy) {
-  TestConnectorsService service;
+  TestingPrefServiceSimple prefs;
+  TestConnectorsService service(&prefs);
+
   service.set_connectors_enabled(true);
   service.set_machine_dm_token();
   service.GetPrefs()->SetInteger(kEnterpriseRealTimeUrlCheckMode,
@@ -219,8 +217,7 @@
 }
 
 class ConnectorsServiceBaseReportingSettingsTest
-    : public TestConnectorsService,
-      public testing::Test,
+    : public testing::Test,
       public testing::WithParamInterface<const char*> {
  public:
   const char* pref_value() const { return GetParam(); }
@@ -235,8 +232,9 @@
 };
 
 TEST_P(ConnectorsServiceBaseReportingSettingsTest, Test) {
-  TestConnectorsService service;
-  service.set_connectors_manager_base();
+  TestingPrefServiceSimple prefs;
+  TestConnectorsService service(&prefs);
+
   if (pref_value()) {
     service.GetPrefs()->Set(
         pref(), *base::JSONReader::Read(pref_value(),
@@ -244,10 +242,11 @@
     service.GetPrefs()->SetInteger(scope_pref(), policy::POLICY_SCOPE_MACHINE);
   }
 
-  auto settings = service.GetConnectorsManagerBase()->GetReportingSettings();
+  auto settings =
+      service.ConnectorsManagerBaseForTesting()->GetReportingSettings();
   EXPECT_EQ(reporting_enabled(), settings.has_value());
   EXPECT_EQ(pref_value() == kNormalReportingSettingsPref,
-            !service.GetConnectorsManagerBase()
+            !service.ConnectorsManagerBaseForTesting()
                  ->GetReportingConnectorsSettingsForTesting()
                  .empty());
 }
diff --git a/components/enterprise/obfuscation/core/BUILD.gn b/components/enterprise/obfuscation/core/BUILD.gn
index 604a530..e10cdcf 100644
--- a/components/enterprise/obfuscation/core/BUILD.gn
+++ b/components/enterprise/obfuscation/core/BUILD.gn
@@ -16,6 +16,13 @@
     "//base",
     "//crypto",
   ]
+
+  if (!is_android) {
+    sources += [
+      "obfuscated_file_reader.cc",
+      "obfuscated_file_reader.h",
+    ]
+  }
 }
 
 source_set("unit_tests") {
@@ -26,6 +33,10 @@
     "utils_unittest.cc",
   ]
 
+  if (!is_android) {
+    sources += [ "obfuscated_file_reader_unittest.cc" ]
+  }
+
   deps = [
     ":enterprise_obfuscation",
     "//base",
diff --git a/components/enterprise/obfuscation/core/obfuscated_file_reader.cc b/components/enterprise/obfuscation/core/obfuscated_file_reader.cc
new file mode 100644
index 0000000..7e33c3e
--- /dev/null
+++ b/components/enterprise/obfuscation/core/obfuscated_file_reader.cc
@@ -0,0 +1,231 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/enterprise/obfuscation/core/obfuscated_file_reader.h"
+
+#include "base/files/file.h"
+#include "base/types/expected.h"
+#include "components/enterprise/obfuscation/core/utils.h"
+
+namespace enterprise_obfuscation {
+
+// static
+base::expected<ObfuscatedFileReader, Error> ObfuscatedFileReader::Create(
+    HeaderData header_data,
+    base::File file) {
+  ObfuscatedFileReader reader(std::move(header_data), std::move(file));
+  if (auto init_result = reader.Initialize(); !init_result.has_value()) {
+    return base::unexpected(init_result.error());
+  }
+  return reader;
+}
+
+ObfuscatedFileReader::ObfuscatedFileReader(HeaderData header_data,
+                                           base::File file)
+    : file_(std::move(file)),
+      derived_key_(std::move(header_data.derived_key)),
+      nonce_prefix_(std::move(header_data.nonce_prefix)) {}
+
+ObfuscatedFileReader::~ObfuscatedFileReader() = default;
+
+ObfuscatedFileReader::ObfuscatedFileReader(ObfuscatedFileReader&& other) =
+    default;
+ObfuscatedFileReader& ObfuscatedFileReader::operator=(
+    ObfuscatedFileReader&& other) = default;
+
+base::expected<void, Error> ObfuscatedFileReader::Initialize() {
+  if (!file_.IsValid()) {
+    return base::unexpected(Error::kFileOperationError);
+  }
+  if (!BuildChunkIndex()) {
+    return base::unexpected(Error::kDeobfuscationFailed);
+  }
+  return base::ok();
+}
+
+// static
+base::expected<HeaderData, Error> ObfuscatedFileReader::ReadHeaderData(
+    base::File& file) {
+  if (!file.IsValid()) {
+    return base::unexpected(Error::kFileOperationError);
+  }
+
+  std::array<uint8_t, kHeaderSize> header_buffer;
+  base::span<uint8_t> buffer = base::span(header_buffer);
+
+  if (file.Read(0u, buffer) != kHeaderSize) {
+    return base::unexpected(Error::kFileOperationError);
+  }
+
+  return GetHeaderData(header_buffer);
+}
+
+int64_t ObfuscatedFileReader::Read(base::span<uint8_t> buffer) {
+  uint64_t bytes_to_read = std::min(static_cast<uint64_t>(buffer.size_bytes()),
+                                    deobfuscated_size_ - current_offset_);
+  if (bytes_to_read == 0) {
+    return 0;
+  }
+
+  uint64_t read_end_offset = current_offset_ + bytes_to_read;
+  uint64_t total_bytes_copied = 0;
+
+  // Find the first chunk that might overlap with the read range.
+  auto it = std::lower_bound(
+      chunk_info_.begin(), chunk_info_.end(), current_offset_,
+      [](const ChunkInfo& chunk, uint64_t offset) {
+        return (chunk.deobfuscated_offset + chunk.deobfuscated_size) <= offset;
+      });
+
+  for (; it != chunk_info_.end(); ++it) {
+    const auto& chunk = *it;
+    uint64_t chunk_start_deobfuscated = chunk.deobfuscated_offset;
+    uint64_t chunk_end_deobfuscated =
+        chunk.deobfuscated_offset + chunk.deobfuscated_size;
+
+    if (current_offset_ < chunk_end_deobfuscated &&
+        read_end_offset > chunk_start_deobfuscated) {
+      // This chunk overlaps with the read range.
+      uint64_t obfuscated_chunk_size = chunk.deobfuscated_size + kAuthTagSize;
+      std::vector<uint8_t> obfuscated_data(obfuscated_chunk_size);
+
+      std::optional<size_t> bytes_read =
+          file_.Read(chunk.obfuscated_offset,
+                     base::as_writable_bytes(base::span(obfuscated_data)));
+      if (!bytes_read.has_value() || *bytes_read != obfuscated_chunk_size) {
+        return -1;
+      }
+
+      size_t chunk_index = std::distance(chunk_info_.begin(), it);
+      bool is_last_chunk = (chunk_index == chunk_info_.size() - 1);
+      // TODO(crbug.com/378490429): Maybe add cache for chunk deobfuscations.
+      auto deobfuscated_result =
+          DeobfuscateDataChunk(obfuscated_data, derived_key_, nonce_prefix_,
+                               chunk_index, is_last_chunk);
+
+      if (!deobfuscated_result.has_value()) {
+        return -1;
+      }
+
+      const std::vector<uint8_t>& deobfuscated_chunk =
+          deobfuscated_result.value();
+
+      uint64_t read_start_in_chunk = 0;
+      if (current_offset_ > chunk_start_deobfuscated) {
+        read_start_in_chunk = current_offset_ - chunk_start_deobfuscated;
+      }
+
+      uint64_t read_end_in_chunk = chunk.deobfuscated_size;
+      if (read_end_offset < chunk_end_deobfuscated) {
+        read_end_in_chunk = read_end_offset - chunk_start_deobfuscated;
+      }
+
+      uint64_t bytes_to_copy_from_chunk =
+          read_end_in_chunk - read_start_in_chunk;
+
+      buffer.copy_prefix_from(
+          base::span(deobfuscated_chunk)
+              .subspan(static_cast<size_t>(read_start_in_chunk))
+              .take_first(static_cast<size_t>(bytes_to_copy_from_chunk)));
+      buffer = buffer.subspan(static_cast<size_t>(bytes_to_copy_from_chunk));
+      total_bytes_copied += bytes_to_copy_from_chunk;
+    } else if (chunk_start_deobfuscated >= read_end_offset) {
+      // This chunk is past the read range.
+      break;
+    }
+  }
+
+  current_offset_ += total_bytes_copied;
+  return total_bytes_copied;
+}
+
+int64_t ObfuscatedFileReader::Seek(int64_t offset, base::File::Whence whence) {
+  int64_t base = 0;
+  switch (whence) {
+    case base::File::Whence::FROM_BEGIN:
+      base = 0;
+      break;
+    case base::File::Whence::FROM_CURRENT:
+      base = current_offset_;
+      break;
+    case base::File::Whence::FROM_END:
+      base = deobfuscated_size_;
+      break;
+  }
+
+  int64_t target_offset = base + offset;
+  if (target_offset < 0 ||
+      target_offset > static_cast<int64_t>(deobfuscated_size_)) {
+    return -1;
+  }
+
+  current_offset_ = target_offset;
+  return current_offset_;
+}
+
+int64_t ObfuscatedFileReader::Tell() {
+  return current_offset_;
+}
+
+int64_t ObfuscatedFileReader::GetSize() {
+  return deobfuscated_size_;
+}
+
+bool ObfuscatedFileReader::BuildChunkIndex() {
+  int64_t file_length = file_.GetLength();
+  if (file_length < 0) {
+    return false;
+  }
+
+  uint64_t total_size = static_cast<uint64_t>(file_length);
+  if (total_size < kHeaderSize + kChunkSizePrefixSize) {
+    return false;  // Not even enough space for header and one chunk prefix.
+  }
+
+  uint64_t current_obfuscated_offset = kHeaderSize;
+  uint64_t current_deobfuscated_offset = 0;
+  deobfuscated_size_ = 0;
+
+  while (current_obfuscated_offset < total_size) {
+    if (total_size - current_obfuscated_offset < kChunkSizePrefixSize) {
+      return false;  // Incomplete prefix.
+    }
+
+    std::array<uint8_t, kChunkSizePrefixSize> size_buffer;
+    std::optional<size_t> bytes_read =
+        file_.Read(current_obfuscated_offset, size_buffer);
+    if (!bytes_read.has_value() || *bytes_read != kChunkSizePrefixSize) {
+      return false;  // Failed to read chunk size prefix.
+    }
+
+    auto chunk_size_result = GetObfuscatedChunkSize(size_buffer);
+    if (!chunk_size_result.has_value()) {
+      return false;  // Invalid chunk size prefix.
+    }
+    uint64_t obfuscated_chunk_size = chunk_size_result.value();
+
+    if (obfuscated_chunk_size < kAuthTagSize) {
+      return false;  // Obfuscated chunk size smaller than auth tag.
+    }
+
+    uint64_t deobfuscated_chunk_size = obfuscated_chunk_size - kAuthTagSize;
+    uint64_t chunk_data_offset =
+        current_obfuscated_offset + kChunkSizePrefixSize;
+
+    chunk_info_.push_back({current_deobfuscated_offset, deobfuscated_chunk_size,
+                           chunk_data_offset});
+    current_deobfuscated_offset += deobfuscated_chunk_size;
+    deobfuscated_size_ += deobfuscated_chunk_size;
+
+    current_obfuscated_offset += kChunkSizePrefixSize + obfuscated_chunk_size;
+
+    if (current_obfuscated_offset > total_size) {
+      return false;  // Chunk extends beyond file size.
+    }
+  }
+
+  return true;
+}
+
+}  // namespace enterprise_obfuscation
diff --git a/components/enterprise/obfuscation/core/obfuscated_file_reader.h b/components/enterprise/obfuscation/core/obfuscated_file_reader.h
new file mode 100644
index 0000000..e94f691
--- /dev/null
+++ b/components/enterprise/obfuscation/core/obfuscated_file_reader.h
@@ -0,0 +1,68 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_ENTERPRISE_OBFUSCATION_CORE_OBFUSCATED_FILE_READER_H_
+#define COMPONENTS_ENTERPRISE_OBFUSCATION_CORE_OBFUSCATED_FILE_READER_H_
+
+#include "base/files/file.h"
+#include "base/types/expected.h"
+#include "components/enterprise/obfuscation/core/utils.h"
+
+namespace enterprise_obfuscation {
+
+// Used in tests.
+class ObfuscatedFileReaderPeer;
+
+// Manages reading and deobfuscating a file that was obfuscated with
+// DownloadObfuscator. This class supports seek operations and on-demand
+// deobfuscation of file chunks.
+class COMPONENT_EXPORT(ENTERPRISE_OBFUSCATION) ObfuscatedFileReader {
+ public:
+  static base::expected<ObfuscatedFileReader, Error> Create(
+      HeaderData header_data,
+      base::File file);
+
+  ~ObfuscatedFileReader();
+
+  static base::expected<HeaderData, Error> ReadHeaderData(base::File& file);
+
+  ObfuscatedFileReader(const ObfuscatedFileReader&) = delete;
+  ObfuscatedFileReader& operator=(const ObfuscatedFileReader&) = delete;
+  ObfuscatedFileReader(ObfuscatedFileReader&& other);
+  ObfuscatedFileReader& operator=(ObfuscatedFileReader&& other);
+
+  int64_t Read(base::span<uint8_t> buffer);
+  int64_t Seek(int64_t offset, base::File::Whence whence);
+  int64_t Tell();
+  int64_t GetSize();
+
+ private:
+  friend class ObfuscatedFileReaderPeer;
+
+  ObfuscatedFileReader(HeaderData header_data, base::File file);
+
+  base::expected<void, Error> Initialize();
+
+  bool BuildChunkIndex();
+
+  base::File file_;
+  uint64_t current_offset_ = 0;  // Offset in the deobfuscated stream.
+  uint64_t deobfuscated_size_ = 0;
+
+  struct ChunkInfo {
+    uint64_t deobfuscated_offset = 0;  // Offset in the deobfuscated stream.
+    uint64_t deobfuscated_size = 0;    // Size of the deobfuscated chunk.
+    uint64_t obfuscated_offset = 0;    // Offset in the obfuscated file.
+  };
+  // Stores information about each chunk, sorted by deobfuscated_offset.
+  std::vector<ChunkInfo> chunk_info_;
+
+  // Obfuscation parameters from the header.
+  std::array<uint8_t, kKeySize> derived_key_;
+  std::vector<uint8_t> nonce_prefix_;
+};
+
+}  // namespace enterprise_obfuscation
+
+#endif  // COMPONENTS_ENTERPRISE_OBFUSCATION_CORE_OBFUSCATED_FILE_READER_H_
diff --git a/components/enterprise/obfuscation/core/obfuscated_file_reader_unittest.cc b/components/enterprise/obfuscation/core/obfuscated_file_reader_unittest.cc
new file mode 100644
index 0000000..1dc201e
--- /dev/null
+++ b/components/enterprise/obfuscation/core/obfuscated_file_reader_unittest.cc
@@ -0,0 +1,427 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/enterprise/obfuscation/core/obfuscated_file_reader.h"
+
+#include <numeric>
+
+#include "base/files/file.h"
+#include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/memory/scoped_refptr.h"
+#include "base/test/bind.h"
+#include "base/test/task_environment.h"
+#include "components/enterprise/obfuscation/core/download_obfuscator.h"
+#include "components/enterprise/obfuscation/core/utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace enterprise_obfuscation {
+
+namespace {
+constexpr std::string_view kTestData1 = "Hello, world!";
+constexpr std::string_view kTestData2 = "This is another test.";
+}  // namespace
+
+class ObfuscatedFileReaderPeer {
+ public:
+  using ChunkInfo = ObfuscatedFileReader::ChunkInfo;
+
+  static const std::vector<ChunkInfo>& GetChunkInfo(
+      const ObfuscatedFileReader& reader) {
+    return reader.chunk_info_;
+  }
+};
+
+class ObfuscatedFileReaderTest : public testing::Test {
+ public:
+  ObfuscatedFileReaderTest() = default;
+
+  void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); }
+
+ protected:
+  // Returns a pair of <Obfuscated File, Cleartext Data>
+  std::pair<base::File, std::vector<uint8_t>> CreateObfuscatedFile(
+      const std::vector<std::string_view>& chunks) {
+    enterprise_obfuscation::DownloadObfuscator obfuscator;
+    std::vector<uint8_t> obfuscated_content;
+    std::vector<uint8_t> cleartext_content;
+    for (size_t i = 0; i < chunks.size(); ++i) {
+      bool is_last_chunk = (i == chunks.size() - 1);
+      base::span<const uint8_t> chunk_span = base::as_byte_span(chunks[i]);
+      auto result = obfuscator.ObfuscateChunk(chunk_span, is_last_chunk);
+      EXPECT_TRUE(result.has_value());
+      obfuscated_content.insert(obfuscated_content.end(), result->begin(),
+                                result->end());
+      cleartext_content.insert(cleartext_content.end(), chunk_span.begin(),
+                               chunk_span.end());
+    }
+
+    base::FilePath path = temp_dir_.GetPath().AppendASCII("obfuscated.bin");
+    EXPECT_TRUE(base::WriteFile(path, obfuscated_content));
+
+    return std::make_pair(
+        base::File(path, base::File::FLAG_OPEN | base::File::FLAG_READ),
+        cleartext_content);
+  }
+
+  void RunSeekReadTest(ObfuscatedFileReader& reader,
+                       const std::vector<uint8_t>& cleartext) {
+    if (cleartext.empty()) {
+      return;
+    }
+
+    std::vector<size_t> positions;
+    const int size_limit = 10'000;
+    if (cleartext.size() <= size_limit) {
+      positions.resize(cleartext.size());
+      std::iota(positions.begin(), positions.end(), 0);
+    } else {
+      positions.reserve(size_limit * 2);
+      for (size_t i = 0; i < size_limit; ++i) {
+        positions.push_back(i);
+      }
+      for (size_t i = 0; i < size_limit; ++i) {
+        positions.push_back(cleartext.size() - size_limit + i);
+      }
+    }
+
+    for (size_t pos : positions) {
+      int64_t new_offset = reader.Seek(pos, base::File::Whence::FROM_BEGIN);
+      EXPECT_EQ(new_offset, static_cast<int64_t>(pos));
+
+      int64_t current_offset = reader.Tell();
+      EXPECT_EQ(current_offset, static_cast<int64_t>(pos));
+
+      size_t bytes_to_read = std::min<size_t>(10, cleartext.size() - pos);
+      if (bytes_to_read == 0) {
+        continue;
+      }
+
+      std::vector<uint8_t> buffer(bytes_to_read);
+      int64_t result = reader.Read(buffer);
+
+      ASSERT_EQ(result, static_cast<int64_t>(bytes_to_read));
+
+      auto expected_span = base::span(cleartext).subspan(pos, bytes_to_read);
+      EXPECT_EQ(buffer, expected_span);
+
+      current_offset = reader.Tell();
+      EXPECT_EQ(current_offset, static_cast<int64_t>(pos + bytes_to_read));
+    }
+  }
+
+  void VerifyChunkIndex(
+      const std::vector<ObfuscatedFileReaderPeer::ChunkInfo>& chunk_info,
+      const std::vector<uint64_t>& expected_chunk_sizes) {
+    ASSERT_EQ(chunk_info.size(), expected_chunk_sizes.size());
+
+    uint64_t total_deobfuscated_size = 0;
+    uint64_t expected_obfuscated_offset = kHeaderSize + kChunkSizePrefixSize;
+
+    for (size_t i = 0; i < expected_chunk_sizes.size(); ++i) {
+      uint64_t expected_deobfuscated_size = expected_chunk_sizes[i];
+      EXPECT_EQ(chunk_info[i].obfuscated_offset, expected_obfuscated_offset);
+      EXPECT_EQ(chunk_info[i].deobfuscated_size, expected_deobfuscated_size);
+      EXPECT_EQ(chunk_info[i].deobfuscated_offset, total_deobfuscated_size);
+
+      total_deobfuscated_size += expected_deobfuscated_size;
+      expected_obfuscated_offset +=
+          kChunkSizePrefixSize + expected_deobfuscated_size + kAuthTagSize;
+    }
+  }
+
+  base::test::TaskEnvironment task_environment_;
+  base::ScopedTempDir temp_dir_;
+};
+
+class ObfuscatedFileReaderParamTest
+    : public ObfuscatedFileReaderTest,
+      public testing::WithParamInterface<std::vector<std::string_view>> {};
+
+TEST_P(ObfuscatedFileReaderParamTest, BuildChunkIndex) {
+  const auto& chunks = GetParam();
+  auto [file, cleartext] = CreateObfuscatedFile(chunks);
+  ASSERT_TRUE(file.IsValid());
+
+  auto header_data = ObfuscatedFileReader::ReadHeaderData(file);
+  ASSERT_TRUE(header_data.has_value());
+
+  auto reader_result = ObfuscatedFileReader::Create(
+      std::move(header_data).value(), std::move(file));
+  ASSERT_TRUE(reader_result.has_value());
+  ObfuscatedFileReader& reader = reader_result.value();
+
+  const auto& chunk_info = ObfuscatedFileReaderPeer::GetChunkInfo(reader);
+  ASSERT_EQ(chunk_info.size(), chunks.size());
+
+  std::vector<uint64_t> expected_chunk_sizes;
+  for (const auto& chunk : chunks) {
+    expected_chunk_sizes.push_back(chunk.size());
+  }
+  VerifyChunkIndex(chunk_info, expected_chunk_sizes);
+
+  uint64_t total_deobfuscated_size = 0;
+  for (const auto& chunk : chunks) {
+    total_deobfuscated_size += chunk.size();
+  }
+
+  EXPECT_EQ(reader.GetSize(), static_cast<int64_t>(total_deobfuscated_size));
+
+  RunSeekReadTest(reader, cleartext);
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    All,
+    ObfuscatedFileReaderParamTest,
+    testing::Values(std::vector<std::string_view>{kTestData1},
+                    std::vector<std::string_view>{kTestData1, kTestData2}));
+
+TEST_F(ObfuscatedFileReaderTest, BuildChunkIndexLargeFile) {
+  constexpr size_t kTenMB = 10 * 1024 * 1024;
+  constexpr size_t kChunkSize = 1000;
+  std::vector<uint8_t> large_data(kTenMB);
+  for (size_t i = 0; i < kTenMB; ++i) {
+    large_data[i] = static_cast<uint8_t>(i % 256);
+  }
+
+  enterprise_obfuscation::DownloadObfuscator obfuscator;
+  std::vector<uint8_t> obfuscated_content;
+  base::span<const uint8_t> full_span = large_data;
+  size_t num_chunks = 0;
+  for (size_t offset = 0; offset < kTenMB; offset += kChunkSize) {
+    size_t current_chunk_size = std::min(kChunkSize, kTenMB - offset);
+    base::span<const uint8_t> chunk_span =
+        full_span.subspan(offset, current_chunk_size);
+    bool is_last_chunk = (offset + current_chunk_size == kTenMB);
+    auto result = obfuscator.ObfuscateChunk(chunk_span, is_last_chunk);
+    ASSERT_TRUE(result.has_value());
+    obfuscated_content.insert(obfuscated_content.end(), result->begin(),
+                              result->end());
+    num_chunks++;
+  }
+
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+  base::FilePath path = temp_dir.GetPath().AppendASCII("obfuscated_large.bin");
+  ASSERT_TRUE(base::WriteFile(path, obfuscated_content));
+
+  base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
+  ASSERT_TRUE(file.IsValid());
+
+  auto header_data = ObfuscatedFileReader::ReadHeaderData(file);
+  ASSERT_TRUE(header_data.has_value());
+
+  auto reader_result = ObfuscatedFileReader::Create(
+      std::move(header_data).value(), std::move(file));
+  ASSERT_TRUE(reader_result.has_value());
+  ObfuscatedFileReader& reader = reader_result.value();
+
+  const auto& chunk_info = ObfuscatedFileReaderPeer::GetChunkInfo(reader);
+  EXPECT_EQ(chunk_info.size(), num_chunks);
+  EXPECT_EQ(static_cast<size_t>(reader.GetSize()), kTenMB);
+
+  std::vector<uint64_t> expected_chunk_sizes;
+  for (size_t offset = 0; offset < kTenMB; offset += kChunkSize) {
+    expected_chunk_sizes.push_back(std::min(kChunkSize, kTenMB - offset));
+  }
+  VerifyChunkIndex(chunk_info, expected_chunk_sizes);
+
+  EXPECT_EQ(reader.GetSize(), static_cast<int64_t>(kTenMB));
+
+  RunSeekReadTest(reader, large_data);
+}
+
+TEST_F(ObfuscatedFileReaderTest, SeekModes) {
+  auto [file, cleartext] = CreateObfuscatedFile({kTestData1, kTestData2});
+  ASSERT_TRUE(file.IsValid());
+
+  auto header_data = ObfuscatedFileReader::ReadHeaderData(file);
+  ASSERT_TRUE(header_data.has_value());
+
+  auto reader_result = ObfuscatedFileReader::Create(
+      std::move(header_data).value(), std::move(file));
+  ASSERT_TRUE(reader_result.has_value());
+  ObfuscatedFileReader& reader = reader_result.value();
+
+  const int64_t file_size = static_cast<int64_t>(cleartext.size());
+  ASSERT_EQ(reader.GetSize(), file_size);
+
+  auto do_seek = [&](int64_t offset, base::File::Whence whence,
+                     int64_t expected_offset) {
+    int64_t new_offset = reader.Seek(offset, whence);
+    EXPECT_EQ(new_offset, expected_offset);
+
+    if (expected_offset != -1) {
+      int64_t tell_offset = reader.Tell();
+      EXPECT_EQ(tell_offset, expected_offset);
+    }
+  };
+
+  // FROM_BEGIN
+  do_seek(0, base::File::Whence::FROM_BEGIN, 0);
+  do_seek(file_size / 2, base::File::Whence::FROM_BEGIN, file_size / 2);
+  do_seek(file_size, base::File::Whence::FROM_BEGIN, file_size);
+  do_seek(-1, base::File::Whence::FROM_BEGIN, -1);
+  do_seek(file_size + 1, base::File::Whence::FROM_BEGIN, -1);
+
+  // FROM_CURRENT
+  do_seek(0, base::File::Whence::FROM_BEGIN, 0);  // Reset to start
+  do_seek(10, base::File::Whence::FROM_CURRENT, 10);
+  EXPECT_EQ(reader.Tell(), 10);
+  do_seek(-5, base::File::Whence::FROM_CURRENT, 5);
+  EXPECT_EQ(reader.Tell(), 5);
+  do_seek(file_size - 5, base::File::Whence::FROM_CURRENT, file_size);
+  EXPECT_EQ(reader.Tell(), file_size);
+  do_seek(1, base::File::Whence::FROM_CURRENT, -1);  // Past end
+  EXPECT_EQ(reader.Tell(), file_size);            // Should not change on error
+  do_seek(0, base::File::Whence::FROM_BEGIN, 0);  // Reset to start
+  do_seek(-1, base::File::Whence::FROM_CURRENT, -1);  // Before start
+  EXPECT_EQ(reader.Tell(), 0);  // Should not change on error
+
+  // FROM_END
+  do_seek(0, base::File::Whence::FROM_END, file_size);
+  do_seek(-file_size / 2, base::File::Whence::FROM_END,
+          file_size - file_size / 2);
+  do_seek(-file_size, base::File::Whence::FROM_END, 0);
+  do_seek(1, base::File::Whence::FROM_END, -1);
+  do_seek(-file_size - 1, base::File::Whence::FROM_END, -1);
+}
+
+TEST_F(ObfuscatedFileReaderTest, CorruptedFileTests) {
+  // Test Case 1: Invalid Header Size (Too Small)
+  {
+    base::ScopedTempDir temp_dir;
+    ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+    base::FilePath path =
+        temp_dir.GetPath().AppendASCII("corrupt_header_size.bin");
+    std::vector<uint8_t> content(kHeaderSize - 1, 0xAA);
+    ASSERT_TRUE(base::WriteFile(path, content));
+
+    base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
+    ASSERT_TRUE(file.IsValid());
+    auto header_data = ObfuscatedFileReader::ReadHeaderData(file);
+    EXPECT_FALSE(header_data.has_value());
+    EXPECT_EQ(header_data.error(), Error::kFileOperationError);
+  }
+
+  // Test Case 2: Invalid Header Data (Malformed)
+  {
+    base::ScopedTempDir temp_dir;
+    ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+    base::FilePath path =
+        temp_dir.GetPath().AppendASCII("corrupt_header_data.bin");
+    std::vector<uint8_t> content(kHeaderSize, 0xBB);
+    // Intentionally corrupt the header size field.
+    content[0] = 0;  // Invalid header size
+    ASSERT_TRUE(base::WriteFile(path, content));
+
+    base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
+    ASSERT_TRUE(file.IsValid());
+    auto header_data = ObfuscatedFileReader::ReadHeaderData(file);
+    EXPECT_FALSE(header_data.has_value());
+    EXPECT_EQ(header_data.error(), Error::kDeobfuscationFailed);
+  }
+
+  // Test Case 3: File Too Small for Any Chunks
+  {
+    base::ScopedTempDir temp_dir;
+    ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+    base::FilePath path =
+        temp_dir.GetPath().AppendASCII("corrupt_too_small.bin");
+    std::vector<uint8_t> content(kHeaderSize + kChunkSizePrefixSize - 1, 0xCC);
+    ASSERT_TRUE(base::WriteFile(path, content));
+
+    // Valid header for this test.
+    std::array<uint8_t, kKeySize> derived_key;
+    std::vector<uint8_t> nonce_prefix;
+    auto header = CreateHeader(&derived_key, &nonce_prefix);
+    ASSERT_TRUE(header.has_value());
+    std::copy(header->begin(), header->end(), content.begin());
+    ASSERT_TRUE(base::WriteFile(path, content));
+
+    base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
+    ASSERT_TRUE(file.IsValid());
+    auto header_data = ObfuscatedFileReader::ReadHeaderData(file);
+    ASSERT_TRUE(header_data.has_value());
+
+    auto reader_result = ObfuscatedFileReader::Create(
+        std::move(header_data).value(), std::move(file));
+    EXPECT_FALSE(reader_result.has_value());
+    EXPECT_EQ(reader_result.error(), Error::kDeobfuscationFailed);
+  }
+
+  // Test Case 4: Incomplete Chunk Size Prefix
+  {
+    base::ScopedTempDir temp_dir;
+    ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+    base::FilePath path =
+        temp_dir.GetPath().AppendASCII("incomplete_chunk.bin");
+
+    enterprise_obfuscation::DownloadObfuscator obfuscator;
+    std::vector<uint8_t> obfuscated_content;
+    base::span<const uint8_t> chunk_span = base::as_byte_span(kTestData1);
+    auto result = obfuscator.ObfuscateChunk(chunk_span, true);
+    ASSERT_TRUE(result.has_value());
+    obfuscated_content.insert(obfuscated_content.end(), result->begin(),
+                              result->end());
+    ASSERT_TRUE(base::WriteFile(path, obfuscated_content));
+
+    base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ |
+                              base::File::FLAG_WRITE);
+    ASSERT_TRUE(file.IsValid());
+
+    int64_t file_size = file.GetLength();
+    ASSERT_GT(static_cast<size_t>(file_size),
+              kHeaderSize + kChunkSizePrefixSize);
+
+    // Truncate the file to have an incomplete chunk size prefix.
+    ASSERT_TRUE(file.SetLength(file_size - 1));
+    file.Close();  // Close the file to release the handle.
+
+    base::File read_file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
+    ASSERT_TRUE(read_file.IsValid());
+
+    auto header_data = ObfuscatedFileReader::ReadHeaderData(read_file);
+    ASSERT_TRUE(header_data.has_value());
+
+    auto reader_result = ObfuscatedFileReader::Create(
+        std::move(header_data).value(), std::move(read_file));
+    EXPECT_FALSE(reader_result.has_value());
+    EXPECT_EQ(reader_result.error(), Error::kDeobfuscationFailed);
+  }
+
+  // Test Case 5: Deobfuscation Failed for a Chunk (Tampered Data)
+  {
+    enterprise_obfuscation::DownloadObfuscator obfuscator;
+    base::span<const uint8_t> chunk_span = base::as_byte_span(kTestData1);
+    auto result = obfuscator.ObfuscateChunk(chunk_span, true);
+    ASSERT_TRUE(result.has_value());
+    std::vector<uint8_t> obfuscated_content = std::move(result).value();
+
+    // Tamper with the obfuscated data.
+    obfuscated_content[obfuscated_content.size() - kAuthTagSize - 1] ^= 0xFF;
+
+    base::ScopedTempDir temp_dir;
+    ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+    base::FilePath path = temp_dir.GetPath().AppendASCII("corrupt_chunk.bin");
+    ASSERT_TRUE(base::WriteFile(path, obfuscated_content));
+
+    base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
+    ASSERT_TRUE(file.IsValid());
+
+    auto header_data = ObfuscatedFileReader::ReadHeaderData(file);
+    ASSERT_TRUE(header_data.has_value());
+
+    auto reader_result = ObfuscatedFileReader::Create(
+        std::move(header_data).value(), std::move(file));
+    ASSERT_TRUE(reader_result.has_value());
+    ObfuscatedFileReader& reader = reader_result.value();
+
+    std::vector<uint8_t> buffer(kTestData1.size());
+    int64_t read_result = reader.Read(buffer);
+    EXPECT_EQ(read_result, -1);
+  }
+}
+
+}  // namespace enterprise_obfuscation
diff --git a/components/exo/surface_unittest.cc b/components/exo/surface_unittest.cc
index bd3afb9..75ef18e 100644
--- a/components/exo/surface_unittest.cc
+++ b/components/exo/surface_unittest.cc
@@ -164,7 +164,8 @@
       ShellSurface* shell_surface,
       Transform transform,
       const gfx::RectF& expected_rect,
-      bool has_viewport);
+      bool has_viewport,
+      const gfx::Size& buffer_size);
 
  private:
   base::test::ScopedFeatureList feature_list_;
@@ -925,10 +926,12 @@
         // a uv rect.
         auto* tex_draw_quad =
             viz::TextureDrawQuad::MaterialCast(quad_list.front());
-        EXPECT_POINTF_NEAR(tex_draw_quad->uv_top_left, gfx::PointF(0, 0),
+        const gfx::RectF tex_draw_quad_tex_coords(
+            tex_draw_quad->GetNormalizedTexCoords(child_buffer_size));
+        EXPECT_POINTF_NEAR(tex_draw_quad_tex_coords.origin(), gfx::PointF(0, 0),
                            0.001f);
-        EXPECT_POINTF_NEAR(tex_draw_quad->uv_bottom_right, gfx::PointF(1, 1),
-                           0.001f);
+        EXPECT_POINTF_NEAR(tex_draw_quad_tex_coords.bottom_right(),
+                           gfx::PointF(1, 1), 0.001f);
         EXPECT_EQ(gfx::Transform(), transform);
         EXPECT_EQ(kTestRects[i], rect);
       } else {
@@ -976,7 +979,8 @@
     ShellSurface* shell_surface,
     Transform transform,
     const gfx::RectF& expected_rect,
-    bool has_viewport) {
+    bool has_viewport,
+    const gfx::Size& buffer_size) {
   const gfx::Rect target_with_no_viewport(ToPixel(gfx::Rect(gfx::Size(52, 4))));
   const gfx::Rect target_with_viewport(ToPixel(gfx::Rect(gfx::Size(128, 64))));
 
@@ -999,8 +1003,7 @@
     ASSERT_EQ(1u, quad_list.size());
     const viz::TextureDrawQuad* quad =
         viz::TextureDrawQuad::MaterialCast(quad_list.front());
-    EXPECT_EQ(expected_rect.origin(), quad->uv_top_left);
-    EXPECT_EQ(expected_rect.bottom_right(), quad->uv_bottom_right);
+    EXPECT_EQ(expected_rect, quad->GetNormalizedTexCoords(buffer_size));
     EXPECT_EQ(
         (has_viewport) ? target_with_viewport : target_with_no_viewport,
         cc::MathUtil::MapEnclosingClippedRect(
@@ -1069,7 +1072,7 @@
   for (const auto& tc : testcases) {
     SetCropAndBufferTransformHelperTransformAndTest(
         surface.get(), shell_surface.get(), tc.transform,
-        gfx::SkRectToRectF(*tc.expected_rect), false);
+        gfx::SkRectToRectF(*tc.expected_rect), false, buffer_size);
   }
 
   surface->SetViewport(gfx::SizeF(128, 64));
@@ -1077,7 +1080,7 @@
   for (const auto& tc : testcases) {
     SetCropAndBufferTransformHelperTransformAndTest(
         surface.get(), shell_surface.get(), tc.transform,
-        gfx::SkRectToRectF(*tc.expected_rect), true);
+        gfx::SkRectToRectF(*tc.expected_rect), true, buffer_size);
   }
 }
 
diff --git a/components/history_clusters/core/context_clusterer_history_service_observer.cc b/components/history_clusters/core/context_clusterer_history_service_observer.cc
index 4e47891..221e505a 100644
--- a/components/history_clusters/core/context_clusterer_history_service_observer.cc
+++ b/components/history_clusters/core/context_clusterer_history_service_observer.cc
@@ -9,6 +9,7 @@
 #include "base/timer/elapsed_timer.h"
 #include "base/trace_event/trace_event.h"
 #include "components/history/core/browser/history_service.h"
+#include "components/history/core/browser/history_types.h"
 #include "components/history_clusters/core/config.h"
 #include "components/history_clusters/core/history_clusters_util.h"
 #include "components/optimization_guide/core/hints/optimization_guide_decider.h"
@@ -156,6 +157,10 @@
     const history::VisitedURLInfo& visited_url_info) {
   TRACE_EVENT0("browser",
                "ContextClusteringHistoryServiceObserver::OnURLVisited");
+  if (visited_url_info.response_code_category ==
+      history::VisitResponseCodeCategory::k404) {
+    return;
+  }
 
   ScopedVisitProcessingTimer url_visited_processing_timer(
       VisitProcessingStage::kUrlVisited);
diff --git a/components/history_clusters/core/context_clusterer_history_service_observer_unittest.cc b/components/history_clusters/core/context_clusterer_history_service_observer_unittest.cc
index ea71aefb..476af800 100644
--- a/components/history_clusters/core/context_clusterer_history_service_observer_unittest.cc
+++ b/components/history_clusters/core/context_clusterer_history_service_observer_unittest.cc
@@ -215,7 +215,9 @@
                 history::VisitID opener_visit = history::kInvalidVisitID,
                 history::VisitID referring_visit = history::kInvalidVisitID,
                 bool is_synced_visit = false,
-                bool is_visible_visit = true) {
+                bool is_visible_visit = true,
+                history::VisitResponseCodeCategory response_code_category =
+                    history::VisitResponseCodeCategory::kNot404) {
     history::URLRow url_row(url);
     history::VisitRow new_visit;
     new_visit.visit_id = visit_id;
@@ -229,8 +231,7 @@
         ui::PAGE_TRANSITION_CHAIN_END);
     observer_->OnURLVisited(
         history_service_.get(),
-        history::VisitedURLInfo(url_row, new_visit,
-                                history::VisitResponseCodeCategory::kNot404));
+        history::VisitedURLInfo(url_row, new_visit, response_code_category));
   }
 
   // Simulates deleting `urls` from history. If `urls` is empty, we will
@@ -648,6 +649,28 @@
       "History.Clusters.ContextClusterer.DbLatency.ReserveNextClusterId", 0);
 }
 
+TEST_F(ContextClustererHistoryServiceObserverTest, Skips404Visits) {
+  base::HistogramTester histogram_tester;
+
+  SetPersistenceExpectedConfig();
+
+  VisitURL(GURL("https://example.com"), 1, base::Time::FromTimeT(123),
+           history::kInvalidVisitID, history::kInvalidVisitID,
+           /*is_synced_visit=*/false, /*is_visible_visit=*/true,
+           history::VisitResponseCodeCategory::k404);
+
+  EXPECT_EQ(0, GetNumClustersCreated());
+
+  // No DB latency histograms should be recorded.
+  histogram_tester.ExpectTotalCount(
+      "History.Clusters.ContextClusterer.DbLatency.ReserveNextClusterId", 0);
+  histogram_tester.ExpectTotalCount(
+      "History.Clusters.ContextClusterer.DbLatency.UpdateClusterVisit", 0);
+  // Visit processing histogram should not be recorded.
+  histogram_tester.ExpectTotalCount(
+      "History.Clusters.ContextClusterer.VisitProcessingLatency.UrlVisited", 0);
+}
+
 TEST_F(ContextClustererHistoryServiceObserverTest, MultipleClusters) {
   VisitURL(GURL("https://example.com"), 1, base::Time::FromTimeT(1));
   VisitURL(GURL("https://example.com/2"), 2, base::Time::FromTimeT(2), 1);
diff --git a/components/history_clusters/core/history_clusters_service.cc b/components/history_clusters/core/history_clusters_service.cc
index f5f6669..b8d0e08 100644
--- a/components/history_clusters/core/history_clusters_service.cc
+++ b/components/history_clusters/core/history_clusters_service.cc
@@ -372,6 +372,10 @@
 void HistoryClustersService::OnURLVisited(
     history::HistoryService* history_service,
     const history::VisitedURLInfo& visited_url_info) {
+  if (visited_url_info.response_code_category ==
+      history::VisitResponseCodeCategory::k404) {
+    return;
+  }
   if (!visited_url_info.visit_row.originator_cache_guid.empty()) {
     received_synced_visit_since_last_update_ = true;
   }
diff --git a/components/input/render_input_router.cc b/components/input/render_input_router.cc
index b077651..61814481 100644
--- a/components/input/render_input_router.cc
+++ b/components/input/render_input_router.cc
@@ -310,7 +310,11 @@
 }
 
 void RenderInputRouter::OnUnconfirmedTapConvertedToTap() {
-  render_input_router_client_->OnUnconfirmedTapConvertedToTap();
+  // TODO(crbug.com/461701945): Reset gesture timers on Viz as well where
+  // `render_input_router_client_` is null.
+  if (render_input_router_client_) {
+    render_input_router_client_->OnUnconfirmedTapConvertedToTap();
+  }
 }
 
 blink::mojom::InputEventResultState RenderInputRouter::FilterInputEvent(
diff --git a/components/omnibox/browser/history_fuzzy_provider.cc b/components/omnibox/browser/history_fuzzy_provider.cc
index 0eaeb22..1071d82 100644
--- a/components/omnibox/browser/history_fuzzy_provider.cc
+++ b/components/omnibox/browser/history_fuzzy_provider.cc
@@ -684,6 +684,10 @@
 void HistoryFuzzyProvider::OnURLVisited(
     history::HistoryService* history_service,
     const history::VisitedURLInfo& visited_url_info) {
+  if (visited_url_info.response_code_category ==
+      history::VisitResponseCodeCategory::k404) {
+    return;
+  }
   if (root_.TerminalCount() <
       std::min(OmniboxFieldTrial::MaxNumHQPUrlsIndexedAtStartup(),
                kMaxTerminalCount)) {
diff --git a/components/omnibox/browser/lens_suggest_inputs_utils.h b/components/omnibox/browser/lens_suggest_inputs_utils.h
index 2dcbe13..b81dbc6 100644
--- a/components/omnibox/browser/lens_suggest_inputs_utils.h
+++ b/components/omnibox/browser/lens_suggest_inputs_utils.h
@@ -14,11 +14,12 @@
   std::optional<lens::proto::LensOverlaySuggestInputs>)>;
 
 inline bool AreLensSuggestInputsReady(
-  std::optional<lens::proto::LensOverlaySuggestInputs> suggest_inputs) {
-return suggest_inputs.has_value() &&
-       suggest_inputs->has_search_session_id() &&
-       suggest_inputs->has_contextual_visual_input_type() &&
-       suggest_inputs->has_encoded_request_id();
+    const std::optional<lens::proto::LensOverlaySuggestInputs>&
+        suggest_inputs) {
+  return suggest_inputs.has_value() &&
+         suggest_inputs->has_search_session_id() &&
+         suggest_inputs->has_contextual_visual_input_type() &&
+         suggest_inputs->has_encoded_request_id();
 }
 
 // These values are persisted to logs. Entries should not be renumbered and
diff --git a/components/optimization_guide/internal b/components/optimization_guide/internal
index 41ab3397..b54a987 160000
--- a/components/optimization_guide/internal
+++ b/components/optimization_guide/internal
@@ -1 +1 @@
-Subproject commit 41ab339735f8f9a9f8dad87d3d81cfd89ead6212
+Subproject commit b54a9872b4a49c01ed1f93011dfd96ad67803be7
diff --git a/components/page_content_annotations/core/page_content_annotations_features.cc b/components/page_content_annotations/core/page_content_annotations_features.cc
index 1d2d4a1..15fcdf3 100644
--- a/components/page_content_annotations/core/page_content_annotations_features.cc
+++ b/components/page_content_annotations/core/page_content_annotations_features.cc
@@ -67,6 +67,46 @@
 const base::FeatureParam<std::string> kPageContentExtractionTriggeringMode{
     &kAnnotatedPageContentExtraction, "triggering_mode", "on_load"};
 
+bool IsSupportedLocale(const std::string& locale,
+                       const std::string& supported_locales) {
+  if (supported_locales == "*") {
+    return true;
+  }
+
+  std::vector<std::string> supported = base::SplitString(
+      supported_locales, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+  // An empty admits any locale.
+  if (supported.empty()) {
+    return true;
+  }
+
+  // Otherwise, the locale or the primary language subtag must match an element
+  // of the allowlist.
+  return base::Contains(supported, locale) ||
+         base::Contains(supported, l10n_util::GetLanguage(locale));
+}
+
+bool IsSupportedCountry(const std::string& country_code,
+                        const std::string& supported_countries) {
+  if (supported_countries == "*") {
+    return true;
+  }
+
+  std::vector<std::string> supported =
+      base::SplitString(supported_countries, ",", base::TRIM_WHITESPACE,
+                        base::SPLIT_WANT_NONEMPTY);
+  // An empty allowlist admits any country.
+  if (supported.empty()) {
+    return true;
+  }
+
+  return std::ranges::any_of(
+      supported, [&country_code](const auto& supported_country_code) {
+        return base::EqualsCaseInsensitiveASCII(supported_country_code,
+                                                country_code);
+      });
+}
+
 }  // namespace
 
 // Enables page content to be annotated.
@@ -85,9 +125,6 @@
 BASE_FEATURE(kOptimizationGuideUseContinueOnShutdownForPageContentAnnotations,
              enabled_by_default_non_ios);
 
-BASE_FEATURE(kPageContentAnnotationsPersistSalientImageMetadata,
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 BASE_FEATURE(kExtractRelatedSearchesFromPrefetchedZPSResponse,
              enabled_by_default_desktop_only);
 
@@ -209,14 +246,10 @@
 
 bool ShouldPersistSalientImageMetadata(const std::string& locale,
                                        const std::string& country_code) {
-  return base::FeatureList::IsEnabled(
-             kPageContentAnnotationsPersistSalientImageMetadata) &&
-         IsSupportedLocaleForFeature(
-             locale, kPageContentAnnotationsPersistSalientImageMetadata,
-             enabled_all_mobile_locales_en_us_desktop_only) &&
-         IsSupportedCountryForFeature(
-             country_code, kPageContentAnnotationsPersistSalientImageMetadata,
-             enabled_all_mobile_countries_us_desktop_only);
+  return IsSupportedLocale(locale,
+                           enabled_all_mobile_locales_en_us_desktop_only) &&
+         IsSupportedCountry(country_code,
+                            enabled_all_mobile_countries_us_desktop_only);
 }
 
 size_t MaxRelatedSearchesCacheSize() {
@@ -252,9 +285,10 @@
   return PageContentExtractionTriggeringMode::kOnLoad;
 }
 
-bool IsSupportedLocaleForFeature(const std::string locale,
-                                 const base::Feature& feature,
-                                 const std::string& default_value) {
+bool IsSupportedLocaleForFeature(
+    const std::string& locale,
+    const base::Feature& feature,
+    const std::string& default_value = "de,en,es,fr,it,nl,pt,tr") {
   if (!base::FeatureList::IsEnabled(feature)) {
     return false;
   }
@@ -265,22 +299,8 @@
     // The default list of supported locales for optimization guide features.
     value = default_value;
   }
-  if (value == "*") {
-    // Still provide a way to enable all locales remotely via the '*' character.
-    return true;
-  }
 
-  std::vector<std::string> supported_locales = base::SplitString(
-      value, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
-  // An empty allowlist admits any locale.
-  if (supported_locales.empty()) {
-    return true;
-  }
-
-  // Otherwise, the locale or the primary language subtag must match an element
-  // of the allowlist.
-  return base::Contains(supported_locales, locale) ||
-         base::Contains(supported_locales, l10n_util::GetLanguage(locale));
+  return IsSupportedLocale(locale, value);
 }
 
 bool IsSupportedCountryForFeature(const std::string& country_code,
@@ -296,24 +316,8 @@
     // The default list of supported countries for optimization guide features.
     value = default_value;
   }
-  if (value == "*") {
-    // Still provide a way to enable all countries remotely via the '*'
-    // character.
-    return true;
-  }
 
-  std::vector<std::string> supported_countries = base::SplitString(
-      value, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
-  // An empty allowlist admits any country.
-  if (supported_countries.empty()) {
-    return true;
-  }
-
-  return std::ranges::any_of(
-      supported_countries, [&country_code](const auto& supported_country_code) {
-        return base::EqualsCaseInsensitiveASCII(supported_country_code,
-                                                country_code);
-      });
+  return IsSupportedCountry(country_code, value);
 }
 
 }  // namespace page_content_annotations::features
diff --git a/components/page_content_annotations/core/page_content_annotations_features.h b/components/page_content_annotations/core/page_content_annotations_features.h
index 6546be34..fe4fa7cb 100644
--- a/components/page_content_annotations/core/page_content_annotations_features.h
+++ b/components/page_content_annotations/core/page_content_annotations_features.h
@@ -21,8 +21,6 @@
 COMPONENT_EXPORT(PAGE_CONTENT_ANNOTATIONS_FEATURES)
 BASE_DECLARE_FEATURE(kRemotePageMetadata);
 COMPONENT_EXPORT(PAGE_CONTENT_ANNOTATIONS_FEATURES)
-BASE_DECLARE_FEATURE(kPageContentAnnotationsPersistSalientImageMetadata);
-COMPONENT_EXPORT(PAGE_CONTENT_ANNOTATIONS_FEATURES)
 BASE_DECLARE_FEATURE(kExtractRelatedSearchesFromPrefetchedZPSResponse);
 
 // Enables extraction of AnnotatedPageContent for every page load.
@@ -170,7 +168,7 @@
 // any user may load it, while "" uses the |default_value| allowlist.
 // Exposed for test coverage.
 COMPONENT_EXPORT(PAGE_CONTENT_ANNOTATIONS_FEATURES)
-extern bool IsSupportedLocaleForFeature(const std::string locale,
+extern bool IsSupportedLocaleForFeature(const std::string& locale,
                                         const base::Feature& feature,
                                         const std::string& default_value);
 
diff --git a/components/page_content_annotations/core/page_content_annotations_features_unittest.cc b/components/page_content_annotations/core/page_content_annotations_features_unittest.cc
index b3bfd1a3..dae6efea 100644
--- a/components/page_content_annotations/core/page_content_annotations_features_unittest.cc
+++ b/components/page_content_annotations/core/page_content_annotations_features_unittest.cc
@@ -114,19 +114,20 @@
 }
 
 TEST(PageContentAnnotationsFeaturesTest, ShouldPersistSalientImageMetadata) {
-  base::test::ScopedFeatureList scoped_feature_list;
-
-  scoped_feature_list.InitAndEnableFeatureWithParameters(
-      features::kPageContentAnnotationsPersistSalientImageMetadata,
-      {{"supported_locales", "en-US,en-CA"}, {"supported_countries", "US,CA"}});
-
+#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS)
+  // Mobile should accept all locales and countries.
   EXPECT_TRUE(features::ShouldPersistSalientImageMetadata("en-US", "CA"));
+  EXPECT_TRUE(features::ShouldPersistSalientImageMetadata("fr-CH", "CH"));
+#else
+  // Desktop should only accept en-US, US.
+  EXPECT_TRUE(features::ShouldPersistSalientImageMetadata("en-US", "US"));
   // Tests case-insensitivity.
-  EXPECT_TRUE(features::ShouldPersistSalientImageMetadata("en-US", "cA"));
+  EXPECT_TRUE(features::ShouldPersistSalientImageMetadata("en-US", "uS"));
   EXPECT_FALSE(features::ShouldPersistSalientImageMetadata("", ""));
   EXPECT_FALSE(
       features::ShouldPersistSalientImageMetadata("en-US", "badcountry"));
   EXPECT_FALSE(features::ShouldPersistSalientImageMetadata("badlocale", "US"));
+#endif
 }
 
 TEST(PageContentAnnotationsFeaturesTest,
@@ -155,41 +156,41 @@
   base::test::ScopedFeatureList scoped_feature_list;
   // Specified params should override defaults.
   scoped_feature_list.InitAndEnableFeatureWithParameters(
-      features::kPageContentAnnotationsPersistSalientImageMetadata,
+      features::kRemotePageMetadata,
       {{"supported_locales", "en-US,en-CA,fr"}, {"supported_countries", "*"}});
   // All countries allowed by param, ignoring default_value allowlist.
   EXPECT_TRUE(features::IsSupportedCountryForFeature(
-      "US", features::kPageContentAnnotationsPersistSalientImageMetadata,
+      "US", features::kRemotePageMetadata,
       /*default_value=*/""));
   EXPECT_TRUE(features::IsSupportedCountryForFeature(
-      "CA", features::kPageContentAnnotationsPersistSalientImageMetadata,
+      "CA", features::kRemotePageMetadata,
       /*default_value=*/"*"));
   EXPECT_TRUE(features::IsSupportedCountryForFeature(
-      "CA", features::kPageContentAnnotationsPersistSalientImageMetadata,
+      "CA", features::kRemotePageMetadata,
       /*default_value=*/"US"));
   // Locales only allow en-US,en-CA specifically respecting param.
   EXPECT_TRUE(features::IsSupportedLocaleForFeature(
-      "en-CA", features::kPageContentAnnotationsPersistSalientImageMetadata,
+      "en-CA", features::kRemotePageMetadata,
       /*default_value=*/"*"));
   EXPECT_TRUE(features::IsSupportedLocaleForFeature(
-      "en-US", features::kPageContentAnnotationsPersistSalientImageMetadata,
+      "en-US", features::kRemotePageMetadata,
       /*default_value=*/"*"));
   // en locale is less specific than allowlist so it doesn't match.
-  EXPECT_FALSE(features::IsSupportedLocaleForFeature(
-      "en", features::kPageContentAnnotationsPersistSalientImageMetadata,
-      /*default_value=*/""));
+  EXPECT_FALSE(
+      features::IsSupportedLocaleForFeature("en", features::kRemotePageMetadata,
+                                            /*default_value=*/""));
   // More specific than allowlist is allowed.
+  EXPECT_TRUE(
+      features::IsSupportedLocaleForFeature("fr", features::kRemotePageMetadata,
+                                            /*default_value=*/"*"));
   EXPECT_TRUE(features::IsSupportedLocaleForFeature(
-      "fr", features::kPageContentAnnotationsPersistSalientImageMetadata,
+      "fr-CA", features::kRemotePageMetadata,
       /*default_value=*/"*"));
-  EXPECT_TRUE(features::IsSupportedLocaleForFeature(
-      "fr-CA", features::kPageContentAnnotationsPersistSalientImageMetadata,
-      /*default_value=*/"*"));
+  EXPECT_FALSE(
+      features::IsSupportedLocaleForFeature("it", features::kRemotePageMetadata,
+                                            /*default_value=*/""));
   EXPECT_FALSE(features::IsSupportedLocaleForFeature(
-      "it", features::kPageContentAnnotationsPersistSalientImageMetadata,
-      /*default_value=*/""));
-  EXPECT_FALSE(features::IsSupportedLocaleForFeature(
-      "zh-TW", features::kPageContentAnnotationsPersistSalientImageMetadata,
+      "zh-TW", features::kRemotePageMetadata,
       /*default_value=*/""));
 }
 
diff --git a/components/page_content_annotations/core/page_content_annotations_service_unittest.cc b/components/page_content_annotations/core/page_content_annotations_service_unittest.cc
index 29d8735c..ad5dd929 100644
--- a/components/page_content_annotations/core/page_content_annotations_service_unittest.cc
+++ b/components/page_content_annotations/core/page_content_annotations_service_unittest.cc
@@ -461,21 +461,7 @@
            /*local_navigation_id=*/1);
 }
 
-class PageContentAnnotationsServiceSalientImageMetadataTest
-    : public PageContentAnnotationsServiceTest {
- public:
-  PageContentAnnotationsServiceSalientImageMetadataTest() {
-    scoped_feature_list_.InitAndEnableFeatureWithParameters(
-      features::kPageContentAnnotationsPersistSalientImageMetadata,
-      {{"supported_locales", "*"}, {"supported_countries", "*"}});
-  }
-
- private:
-  base::test::ScopedFeatureList scoped_feature_list_;
-};
-
-TEST_F(PageContentAnnotationsServiceSalientImageMetadataTest,
-       RegistersTypeWhenFeatureEnabled) {
+TEST_F(PageContentAnnotationsServiceTest, RegistersType) {
   std::vector<optimization_guide::proto::OptimizationType>
       registered_optimization_types =
           optimization_guide_decider()->registered_optimization_types();
@@ -483,21 +469,20 @@
                              optimization_guide::proto::SALIENT_IMAGE));
 }
 
-TEST_F(PageContentAnnotationsServiceSalientImageMetadataTest,
-       DoesNotPersistIfServerHasNoData) {
+TEST_F(PageContentAnnotationsServiceTest, DoesNotPersistIfServerHasNoData) {
   // Navigate.
   VisitURL(GURL("http://www.nohints.com"), u"sometitle", 13,
            /*local_navigation_id=*/1);
 }
 
-TEST_F(PageContentAnnotationsServiceSalientImageMetadataTest,
+TEST_F(PageContentAnnotationsServiceTest,
        DoesNotPersistIfServerReturnsWrongMetadata) {
   // Navigate.
   VisitURL(GURL("http://wrongmetadata.com"), u"sometitle", 13,
            /*local_navigation_id=*/1);
 }
 
-TEST_F(PageContentAnnotationsServiceSalientImageMetadataTest,
+TEST_F(PageContentAnnotationsServiceTest,
        RequestsToPersistIfHasSalientImageMetadata) {
   EXPECT_CALL(*history_service_, SetHasUrlKeyedImageForVisit(true, 13));
 
diff --git a/components/page_load_metrics/browser/BUILD.gn b/components/page_load_metrics/browser/BUILD.gn
index 73fedc2..6fc9469 100644
--- a/components/page_load_metrics/browser/BUILD.gn
+++ b/components/page_load_metrics/browser/BUILD.gn
@@ -69,8 +69,6 @@
     "page_load_metrics_embedder_interface.h",
     "page_load_metrics_forward_observer.cc",
     "page_load_metrics_forward_observer.h",
-    "page_load_metrics_memory_tracker.cc",
-    "page_load_metrics_memory_tracker.h",
     "page_load_metrics_observer.cc",
     "page_load_metrics_observer.h",
     "page_load_metrics_observer_delegate.cc",
@@ -164,7 +162,6 @@
     "observers/use_counter_page_load_metrics_observer_unittest.cc",
     "observers/zstd_page_load_metrics_observer_unittest.cc",
     "page_load_metrics_forward_observer_unittest.cc",
-    "page_load_metrics_memory_tracker_unittest.cc",
     "page_load_metrics_util_unittest.cc",
     "page_load_tracker_unittest.cc",
     "resource_tracker_unittest.cc",
diff --git a/components/page_load_metrics/browser/features.cc b/components/page_load_metrics/browser/features.cc
index 73a38e6..986ceb2 100644
--- a/components/page_load_metrics/browser/features.cc
+++ b/components/page_load_metrics/browser/features.cc
@@ -27,8 +27,6 @@
                    "category_prefix",
                    /*default_value=*/"");
 
-BASE_FEATURE(kV8PerFrameMemoryMonitoring, base::FEATURE_DISABLED_BY_DEFAULT);
-
 BASE_FEATURE(kBackForwardCacheEmitZeroSamplesForKeyMetrics,
              base::FEATURE_DISABLED_BY_DEFAULT);
 
diff --git a/components/page_load_metrics/browser/features.h b/components/page_load_metrics/browser/features.h
index 82b1f54b..b95090c 100644
--- a/components/page_load_metrics/browser/features.h
+++ b/components/page_load_metrics/browser/features.h
@@ -23,9 +23,6 @@
 // The prefix of the URL category for beacon-leakage-related logging logic.
 BASE_DECLARE_FEATURE_PARAM(std::string, kBeaconLeakageLoggingCategoryPrefix);
 
-// Enables or disables per-frame memory monitoring.
-BASE_DECLARE_FEATURE(kV8PerFrameMemoryMonitoring);
-
 // Enables to emit zero values for some key metrics when back-forward cache is
 // used.
 //
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
index 13f23e68..2c2b9ec6 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -19,7 +19,6 @@
 #include "base/tracing/protos/chrome_track_event.pbzero.h"
 #include "components/page_load_metrics/browser/metrics_lifecycle_observer.h"
 #include "components/page_load_metrics/browser/page_load_metrics_embedder_interface.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
 #include "components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h"
 #include "components/page_load_metrics/browser/page_load_metrics_util.h"
 #include "components/page_load_metrics/browser/page_load_tracker.h"
@@ -252,22 +251,10 @@
 
 void MetricsWebContentsObserver::RenderFrameDeleted(
     content::RenderFrameHost* rfh) {
-  if (auto* memory_tracker = GetMemoryTracker()) {
-    memory_tracker->OnRenderFrameDeleted(rfh, this);
-  }
-
   if (PageLoadTracker* tracker = GetPageLoadTracker(rfh)) {
     tracker->RenderFrameDeleted(rfh);
   }
 
-  content::GlobalRenderFrameHostId rfh_id = rfh->GetGlobalId();
-  auto new_end_it = std::remove_if(queued_memory_updates_.begin(),
-                                   queued_memory_updates_.end(),
-                                   [rfh_id](const MemoryUpdate& update) {
-                                     return update.routing_id == rfh_id;
-                                   });
-  queued_memory_updates_.erase(new_end_it, queued_memory_updates_.end());
-
   // PageLoadTracker and smoothness data can be associated only with a main
   // frame.
   if (rfh->GetParent()) {
@@ -845,19 +832,6 @@
     }
   }
 
-  // Send queued memory updates for the tracker.
-  content::GlobalRenderFrameHostId rfh_id = render_frame_host->GetGlobalId();
-  auto first_update_for_rfh = std::partition(
-      queued_memory_updates_.begin(), queued_memory_updates_.end(),
-      [rfh_id](const MemoryUpdate& update) {
-        return update.routing_id != rfh_id;
-      });
-  if (first_update_for_rfh != queued_memory_updates_.end()) {
-    raw_tracker->OnV8MemoryChanged(std::vector<MemoryUpdate>(
-        first_update_for_rfh, queued_memory_updates_.end()));
-    queued_memory_updates_.erase(first_update_for_rfh,
-                                 queued_memory_updates_.end());
-  }
 }
 
 void MetricsWebContentsObserver::MaybeStorePageLoadTrackerForBackForwardCache(
@@ -1376,34 +1350,6 @@
   }
 }
 
-void MetricsWebContentsObserver::OnV8MemoryChanged(
-    const std::vector<MemoryUpdate>& memory_updates) {
-  std::map<PageLoadTracker*, std::vector<MemoryUpdate>> per_tracker_updates;
-  for (const MemoryUpdate& update : memory_updates) {
-    content::RenderFrameHost* rfh =
-        content::RenderFrameHost::FromID(update.routing_id);
-    if (!rfh) {
-      continue;
-    }
-    PageLoadTracker* tracker = GetPageLoadTracker(rfh);
-    if (tracker) {
-      per_tracker_updates[tracker].push_back(update);
-    } else {
-      // If the load hasn't committed yet, then memory updates can't be sent
-      // at this time, but will still need to be sent later. Queue the updates
-      // in case `tracker` is null due to the navigation having not yet
-      // completed, in which case the queued updates will be sent when
-      // HandleCommittedNavigationForTrackedLoad is called.  Otherwise, they
-      // will be ignored and cleared when `rfh` is deleted.
-      queued_memory_updates_.push_back(update);
-    }
-  }
-
-  for (const auto& map_pair : per_tracker_updates) {
-    map_pair.first->OnV8MemoryChanged(map_pair.second);
-  }
-}
-
 void MetricsWebContentsObserver::OnSharedStorageWorkletHostCreated(
     content::RenderFrameHost* rfh) {
   if (!rfh) {
@@ -1557,12 +1503,6 @@
   return nullptr;
 }
 
-PageLoadMetricsMemoryTracker* MetricsWebContentsObserver::GetMemoryTracker()
-    const {
-  return embedder_interface_->GetMemoryTrackerForBrowserContext(
-      web_contents()->GetBrowserContext());
-}
-
 WEB_CONTENTS_USER_DATA_KEY_IMPL(MetricsWebContentsObserver);
 
 }  // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.h b/components/page_load_metrics/browser/metrics_web_contents_observer.h
index 470e3b9..683e4c8 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer.h
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer.h
@@ -44,7 +44,6 @@
 class PageLoadMetricsMemoryTracker;
 class PageLoadMetricsObserverDelegate;
 class PageLoadTracker;
-struct MemoryUpdate;
 
 // MetricsWebContentsObserver tracks page loads and loading metrics
 // related data based on IPC messages received from a
@@ -193,11 +192,6 @@
   // not be called within WebContentsObserver::DidFinishNavigation methods.
   void OnPrefetchLikely();
 
-  // Called when V8 per-frame memory usage updates are available. Virtual for
-  // test classes to override.
-  virtual void OnV8MemoryChanged(
-      const std::vector<MemoryUpdate>& memory_updates);
-
   // Called when a `SharedStorageWorkletHost` is created for `rfh`.
   void OnSharedStorageWorkletHostCreated(content::RenderFrameHost* rfh);
 
@@ -388,12 +382,6 @@
   // navigation, stop button, etc.).
   std::vector<std::unique_ptr<PageLoadTracker>> aborted_provisional_loads_;
 
-  // Memory updates that are accumulated while there is no PageLoadTracker
-  // associated with RenderFrameHost. Will be sent in
-  // HandleCommittedNavigationForTrackedLoad, unless the RenderFrameHost is
-  // deleted and/or web contents is destroyed.
-  std::vector<MemoryUpdate> queued_memory_updates_;
-
   // This stores the PageLoadTracker for the primary page. GetPageLoadTracker()
   // is available to find a PageLoadTracker for non-primary pages.
   std::unique_ptr<PageLoadTracker> primary_page_;
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
index ead851b..e19e550 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
@@ -1310,11 +1310,6 @@
       return CONTINUE_OBSERVING;
     }
 
-    void OnV8MemoryChanged(
-        const std::vector<MemoryUpdate>& memory_updates) override {
-      owner_->OnV8MemoryChanged(committed_url_, memory_updates);
-    }
-
    private:
     raw_ptr<MetricsWebContentsObserverNonPrimaryPageTest> owner_;
     GURL committed_url_;
@@ -1341,52 +1336,6 @@
       override {
     return std::make_unique<Embedder>(this);
   }
-
-  void OnV8MemoryChanged(const GURL& url,
-                         const std::vector<MemoryUpdate>& memory_updates) {
-    std::vector<MemoryUpdate>& updates_for_url = observed_memory_updates_[url];
-    updates_for_url.insert(updates_for_url.end(), memory_updates.begin(),
-                           memory_updates.end());
-  }
-
- protected:
-  std::map<GURL, std::vector<MemoryUpdate>> observed_memory_updates_;
 };
 
-TEST_F(MetricsWebContentsObserverNonPrimaryPageTest, MemoryUpdates) {
-  // Go to the URL1.
-  content::NavigationSimulator::NavigateAndCommitFromBrowser(
-      web_contents(), GURL(kDefaultTestUrl));
-  ASSERT_EQ(main_rfh()->GetLastCommittedURL().spec(), GURL(kDefaultTestUrl));
-  content::GlobalRenderFrameHostId rfh1_id = main_rfh()->GetGlobalId();
-
-  ASSERT_EQ(0, CountCompleteTimingReported());
-  EXPECT_EQ(0, CountOnBackForwardCacheEntered());
-  EXPECT_EQ(1, tracker_committed_count());
-
-  // Go to the URL2.
-  content::NavigationSimulator::NavigateAndCommitFromBrowser(
-      web_contents(), GURL(kDefaultTestUrl2));
-  ASSERT_EQ(main_rfh()->GetLastCommittedURL().spec(), GURL(kDefaultTestUrl2));
-  content::GlobalRenderFrameHostId rfh2_id = main_rfh()->GetGlobalId();
-
-  ASSERT_EQ(1, CountCompleteTimingReported());
-  EXPECT_EQ(1, CountOnBackForwardCacheEntered());
-  EXPECT_EQ(2, tracker_committed_count());
-
-  std::vector<MemoryUpdate> memory_updates = {{rfh1_id, base::ByteCount(100)},
-                                              {rfh2_id, base::ByteCount(200)}};
-  observer()->OnV8MemoryChanged(memory_updates);
-
-  // Verify that memory updates are observed both in primary URL2 and
-  // non-primary URL1.
-  ASSERT_EQ(2u, observed_memory_updates_.size());
-  ASSERT_EQ(1u, observed_memory_updates_[GURL(kDefaultTestUrl)].size());
-  EXPECT_EQ(base::ByteCount(100),
-            observed_memory_updates_[GURL(kDefaultTestUrl)][0].delta_bytes);
-  ASSERT_EQ(1u, observed_memory_updates_[GURL(kDefaultTestUrl2)].size());
-  EXPECT_EQ(base::ByteCount(200),
-            observed_memory_updates_[GURL(kDefaultTestUrl2)][0].delta_bytes);
-}
-
 }  // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc
index 86a0a0ce2..f232db65 100644
--- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc
+++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc
@@ -30,7 +30,6 @@
 #include "components/history/core/browser/history_types.h"
 #include "components/page_load_metrics/browser/features.h"
 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
 #include "components/page_load_metrics/browser/page_load_metrics_util.h"
 #include "components/page_load_metrics/browser/resource_tracker.h"
 #include "components/page_load_metrics/common/page_end_reason.h"
@@ -801,34 +800,6 @@
   ad_frames_data_.erase(id_and_data);
 }
 
-void AdsPageLoadMetricsObserver::OnV8MemoryChanged(
-    const std::vector<MemoryUpdate>& memory_updates) {
-  for (const auto& update : memory_updates) {
-    memory_update_count_++;
-
-    content::RenderFrameHost* render_frame_host =
-        content::RenderFrameHost::FromID(update.routing_id);
-
-    if (!render_frame_host) {
-      continue;
-    }
-
-    content::FrameTreeNodeId frame_node_id =
-        render_frame_host->GetFrameTreeNodeId();
-    FrameTreeData* ad_frame_data = FindFrameData(frame_node_id);
-
-    if (ad_frame_data) {
-      ad_frame_data->UpdateMemoryUsage(update.delta_bytes);
-      UpdateAggregateMemoryUsage(update.delta_bytes,
-                                 ad_frame_data->visibility());
-    } else if (!render_frame_host->GetParentOrOuterDocument()) {
-      // |render_frame_host| is the outermost main frame.
-      aggregate_frame_data_->update_outermost_main_frame_memory(
-          update.delta_bytes);
-    }
-  }
-}
-
 void AdsPageLoadMetricsObserver::OnAdAuctionComplete(
     bool is_server_auction,
     bool is_on_device_auction,
@@ -1187,14 +1158,6 @@
                 outermost_main_frame_resource_data.ad_network_bytes());
   ADS_HISTOGRAM("Bytes.MainFrame.Ads.Total2", PAGE_BYTES_HISTOGRAM, visibility,
                 outermost_main_frame_resource_data.ad_bytes());
-  if (base::FeatureList::IsEnabled(
-          page_load_metrics::features::kV8PerFrameMemoryMonitoring)) {
-    PAGE_BYTES_HISTOGRAM(
-        "PageLoad.Clients.Ads.Memory.MainFrame.Max",
-        aggregate_frame_data_->outermost_main_frame_max_memory());
-    base::UmaHistogramCounts10000("PageLoad.Clients.Ads.Memory.UpdateCount",
-                                  memory_update_count_);
-  }
 }
 
 void AdsPageLoadMetricsObserver::RecordPerFrameMetrics(
@@ -1573,20 +1536,6 @@
   return heavy_ad_service_->heavy_ad_blocklist();
 }
 
-void AdsPageLoadMetricsObserver::UpdateAggregateMemoryUsage(
-    base::ByteCount delta_bytes,
-    FrameVisibility frame_visibility) {
-  // For both the given |frame_visibility| and kAnyVisibility, update the
-  // current aggregate memory usage by adding the needed delta, and then
-  // if the current aggregate usage is greater than the recorded
-  // max aggregate usage, update the max aggregate usage.
-  for (const auto visibility :
-       {FrameVisibility::kAnyVisibility, frame_visibility}) {
-    aggregate_frame_data_->update_ad_memory_by_visibility(visibility,
-                                                          delta_bytes);
-  }
-}
-
 void AdsPageLoadMetricsObserver::CleanupDeletedFrame(
     content::FrameTreeNodeId id,
     FrameTreeData* frame_data,
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h
index 3a9ae17..7e0d21c 100644
--- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h
+++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h
@@ -148,8 +148,6 @@
   void OnMainFrameAdRectsChanged(
       const base::flat_map<int, gfx::Rect>& main_frame_ad_rects) override;
   void OnSubFrameDeleted(content::FrameTreeNodeId frame_tree_node_id) override;
-  void OnV8MemoryChanged(
-      const std::vector<MemoryUpdate>& memory_updates) override;
   void OnAdAuctionComplete(bool is_server_auction,
                            bool is_on_device_auction,
                            content::AuctionResult result) override;
@@ -159,9 +157,6 @@
     heavy_ad_threshold_noise_provider_ = std::move(noise_provider);
   }
 
-  void UpdateAggregateMemoryUsage(base::ByteCount bytes,
-                                  FrameVisibility visibility);
-
   void CleanupDeletedFrame(content::FrameTreeNodeId id,
                            FrameTreeData* frame_data,
                            bool update_density_tracker,
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
index 060b6f4..f5dd369 100644
--- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
+++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
@@ -35,7 +35,6 @@
 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
 #include "components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h"
 #include "components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
 #include "components/page_load_metrics/browser/page_load_metrics_observer.h"
 #include "components/page_load_metrics/browser/page_load_tracker.h"
 #include "components/page_load_metrics/common/page_load_metrics_util.h"
@@ -125,10 +124,7 @@
 constexpr char kNonAdUrl[] = "https://foo.com/";
 constexpr char kNonAdUrlSameOrigin[] = "https://ads.com/foo";
 constexpr char kAllowedUrl[] = "https://foo.com/ad/not_disallowed.html";
-constexpr char kMemoryMainFrameMaxHistogramId[] =
-    "PageLoad.Clients.Ads.Memory.MainFrame.Max";
-constexpr char kMemoryUpdateCountHistogramId[] =
-    "PageLoad.Clients.Ads.Memory.UpdateCount";
+
 constexpr char kAdClickHistoryQueryCountHistogramId[] =
     "PageLoad.Clients.Ads.AdClick.HistoryQueryCount2";
 constexpr char kAdClickEtldPlusOneHistoryQueryCountHistogramId[] =
@@ -871,11 +867,6 @@
                              "Activated.PostActivation");
   }
 
-  void SimulateV8MemoryChange(content::RenderFrameHost* render_frame_host,
-                              base::ByteCount delta_bytes) {
-    tester()->SimulateMemoryUpdate(render_frame_host, delta_bytes);
-  }
-
  protected:
   virtual void SetUpScopedFeatureList() {
     scoped_feature_list_.InitWithFeaturesAndParameters(
@@ -3628,138 +3619,6 @@
       ukm::builders::AdFrameLoad::kTiming_FirstContentfulPaintName, 90);
 }
 
-class AdsMemoryMeasurementTest : public AdsPageLoadMetricsObserverTest {
- private:
-  void SetUpScopedFeatureList() override {
-    scoped_feature_list_.InitWithFeaturesAndParameters(
-        {
-            {blink::features::kFencedFrames,
-             {{"implementation_type", "mparch"}}},
-            {page_load_metrics::features::kV8PerFrameMemoryMonitoring, {}},
-        },
-        {});
-  }
-};
-
-INSTANTIATE_TEST_SUITE_P(All, AdsMemoryMeasurementTest, testing::Bool());
-
-TEST_P(AdsMemoryMeasurementTest, SingleAdFrame_MaxMemoryBytesRecorded) {
-  RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl);
-  RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame);
-
-  // Load kilobytes in frame so that aggregates are recorded.
-  ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, base::KiB(10));
-
-  // Notify that memory measurement is available.
-  SimulateV8MemoryChange(ad_frame, base::KiB(10));
-
-  // Update memory usage. The max will change, as 30 is positive.
-  SimulateV8MemoryChange(ad_frame, base::KiB(30));
-
-  // Update memory usage. The max will remain the same, as -20 is negative.
-  SimulateV8MemoryChange(ad_frame, base::KiB(-20));
-
-  // Navigate main frame to record histograms.
-  NavigateMainFrame(kNonAdUrl);
-
-  histogram_tester().ExpectUniqueSample(kMemoryUpdateCountHistogramId, 3, 1);
-}
-
-TEST_P(AdsMemoryMeasurementTest, MultiAdFramesNested_MaxMemoryBytesRecorded) {
-  RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl);
-  RenderFrameHost* ad_frame1 = CreateAndNavigateSubFrame(kAdUrl, main_frame);
-
-  // Create a nested subframe with the same origin as its parent.
-  RenderFrameHost* ad_frame2 = CreateAndNavigateSubFrame(kAdUrl, ad_frame1);
-
-  // Load kilobytes in each frame so that aggregates are recorded.
-  ResourceDataUpdate(ad_frame1, ResourceCached::kNotCached, base::KiB(10));
-  ResourceDataUpdate(ad_frame2, ResourceCached::kNotCached, base::KiB(10));
-
-  // Notify that memory measurement is available.
-  SimulateV8MemoryChange(ad_frame1, base::KiB(10));
-  SimulateV8MemoryChange(ad_frame2, base::KiB(10));
-
-  // Update memory usage. The max will change, as these values are both
-  // positive.
-  SimulateV8MemoryChange(ad_frame1, base::KiB(30));
-  SimulateV8MemoryChange(ad_frame2, base::KiB(10));
-
-  // Update memory usage. The max will remain the same, as these values
-  // are both negative.
-  SimulateV8MemoryChange(ad_frame1, base::KiB(-25));
-  SimulateV8MemoryChange(ad_frame2, base::KiB(-5));
-
-  // Navigate main frame to record histograms.
-  NavigateMainFrame(kNonAdUrl);
-
-  histogram_tester().ExpectUniqueSample(kMemoryUpdateCountHistogramId, 6, 1);
-}
-
-TEST_P(AdsMemoryMeasurementTest,
-       MultiAdFramesNonNested_MaxMemoryBytesRecorded) {
-  RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl);
-  RenderFrameHost* ad_frame1 = CreateAndNavigateSubFrame(kAdUrl, main_frame);
-
-  // Create another ad subframe with a different origin.
-  RenderFrameHost* ad_frame2 =
-      CreateAndNavigateSubFrame(kOtherAdUrl, main_frame);
-
-  // Load kilobytes in each frame so that aggregates are recorded.
-  ResourceDataUpdate(ad_frame1, ResourceCached::kNotCached, base::KiB(10));
-  ResourceDataUpdate(ad_frame2, ResourceCached::kNotCached, base::KiB(10));
-
-  // Notify that memory measurement is available.
-  SimulateV8MemoryChange(ad_frame1, base::KiB(10));
-  SimulateV8MemoryChange(ad_frame2, base::KiB(10));
-
-  // Update memory usage. The second max and aggregate max
-  // will change.
-  SimulateV8MemoryChange(ad_frame1, base::KiB(-9));
-  SimulateV8MemoryChange(ad_frame2, base::KiB(100));
-
-  // Update memory usage. The aggregate max will change
-  // again after the first update.
-  SimulateV8MemoryChange(ad_frame1, base::KiB(1));
-  SimulateV8MemoryChange(ad_frame2, base::KiB(-90));
-
-  // Update memory usage. The first max will change.
-  SimulateV8MemoryChange(ad_frame1, base::KiB(50));
-  SimulateV8MemoryChange(ad_frame2, base::KiB(-5));
-
-  // Navigate main frame to record histograms.
-  NavigateMainFrame(kNonAdUrl);
-
-  histogram_tester().ExpectUniqueSample(kMemoryUpdateCountHistogramId, 8, 1);
-}
-
-TEST_P(AdsMemoryMeasurementTest, MainFrame_MaxMemoryBytesRecorded) {
-  RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl);
-  RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame);
-
-  // Load kilobytes in each frame. |ad_frame| must exist for ad metrics to be
-  // tracked.
-  ResourceDataUpdate(main_frame, ResourceCached::kNotCached, base::KiB(1000));
-  ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, base::KiB(10));
-
-  // Notify that memory measurement is available.
-  SimulateV8MemoryChange(main_frame, base::KiB(1000));
-
-  // Update memory usage. The max will also change, as this value is
-  // positive.
-  SimulateV8MemoryChange(main_frame, base::KiB(1000));
-
-  // Update memory usage. The max will remain the same, as this value is
-  // negative.
-  SimulateV8MemoryChange(main_frame, base::KiB(-1980));
-
-  // Navigate to record histograms.
-  NavigateFrame(kNonAdUrl, main_frame);
-
-  histogram_tester().ExpectUniqueSample(kMemoryMainFrameMaxHistogramId, 2000,
-                                        1);
-  histogram_tester().ExpectUniqueSample(kMemoryUpdateCountHistogramId, 3, 1);
-}
 
 class AdsPageLoadMetricsObserverAdUrlInHistoryTest : public testing::Test {
  public:
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/aggregate_frame_data.h b/components/page_load_metrics/browser/observers/ad_metrics/aggregate_frame_data.h
index b38c78b..001c5eb 100644
--- a/components/page_load_metrics/browser/observers/ad_metrics/aggregate_frame_data.h
+++ b/components/page_load_metrics/browser/observers/ad_metrics/aggregate_frame_data.h
@@ -81,8 +81,6 @@
     base::ByteCount bytes;
     base::ByteCount network_bytes;
     size_t frames = 0;
-    // MemoryUsage is aggregated when a memory update is received.
-    MemoryUsageAggregator memory;
   };
 
   // Returns the appropriate AdDataByVisibility given the |visibility|.
@@ -105,24 +103,10 @@
                                       size_t frames) {
     ad_data_[static_cast<size_t>(visibility)].frames += frames;
   }
-  void update_ad_memory_by_visibility(FrameVisibility visibility,
-                                      base::ByteCount delta_bytes) {
-    ad_data_[static_cast<size_t>(visibility)].memory.UpdateUsage(delta_bytes);
-  }
-
-  // Updates the memory for the main frame of the page.
-  void update_outermost_main_frame_memory(base::ByteCount delta_memory) {
-    outermost_main_frame_memory_.UpdateUsage(delta_memory);
-  }
 
   // Updates the total ad cpu usage for the page.
   void update_ad_cpu_usage(base::TimeDelta usage) { ad_cpu_usage_ += usage; }
 
-  // Get the total memory usage for this page.
-  base::ByteCount outermost_main_frame_max_memory() const {
-    return outermost_main_frame_memory_.max_bytes_used();
-  }
-
   // Get the total cpu usage of this page.
   base::TimeDelta total_cpu_usage() const { return cpu_usage_; }
   base::TimeDelta total_ad_cpu_usage() const { return ad_cpu_usage_; }
@@ -143,9 +127,6 @@
   base::TimeDelta cpu_usage_;
   base::TimeDelta ad_cpu_usage_;
 
-  // The memory used by the outermost main frame.
-  MemoryUsageAggregator outermost_main_frame_memory_;
-
   // The resource data for this page.
   ResourceLoadAggregator resource_data_;
   ResourceLoadAggregator outermost_main_frame_resource_data_;
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.cc b/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.cc
index d5ff591..424957736 100644
--- a/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.cc
+++ b/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.cc
@@ -93,10 +93,4 @@
     peak_windowed_percent_ = current_windowed_percent;
 }
 
-void MemoryUsageAggregator::UpdateUsage(base::ByteCount delta_bytes) {
-  current_bytes_used_ += delta_bytes;
-  if (current_bytes_used_ > max_bytes_used_)
-    max_bytes_used_ = current_bytes_used_;
-}
-
 }  // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.h b/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.h
index 964928aa..2eb4ae3 100644
--- a/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.h
+++ b/components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.h
@@ -128,23 +128,6 @@
   int peak_windowed_percent_ = 0;
 };
 
-class MemoryUsageAggregator {
- public:
-  void UpdateUsage(base::ByteCount delta_bytes);
-
-  base::ByteCount max_bytes_used() const { return max_bytes_used_; }
-
- private:
-  // Maximum concurrent memory usage by V8 in this ad frame tree.
-  // Tracks max value of |v8_current_memory_bytes_used_| for this frame tree.
-  base::ByteCount max_bytes_used_;
-
-  // Current concurrent memory usage by V8 in this ad frame tree.
-  // Computation is best-effort, as it relies on individual asynchronous
-  // per-frame measurements, some of which may be stale.
-  base::ByteCount current_bytes_used_;
-};
-
 }  // namespace page_load_metrics
 
 #endif  // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_AD_METRICS_FRAME_DATA_UTILS_H_
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc b/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc
index 5be96c45..53df5fbc 100644
--- a/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc
+++ b/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc
@@ -64,13 +64,8 @@
     frame_depth_ = GetFullFrameDepth(render_frame_host) - root_frame_depth_;
 }
 
-void FrameTreeData::UpdateMemoryUsage(base::ByteCount delta_bytes) {
-  memory_usage_.UpdateUsage(delta_bytes);
-}
-
 bool FrameTreeData::ShouldRecordFrameForMetrics() const {
-  return !resource_data().bytes().is_zero() || !GetTotalCpuUsage().is_zero() ||
-         memory_usage_.max_bytes_used().is_positive();
+  return !resource_data().bytes().is_zero() || !GetTotalCpuUsage().is_zero();
 }
 
 void FrameTreeData::RecordAdFrameLoadUkmEvent(ukm::SourceId source_id) const {
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h b/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h
index 1c919a3d..a225f2f4 100644
--- a/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h
+++ b/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.h
@@ -162,9 +162,6 @@
   // frame.
   void MaybeUpdateFrameDepth(content::RenderFrameHost* render_frame_host);
 
-  // Updates the recorded bytes of memory used.
-  void UpdateMemoryUsage(base::ByteCount delta_bytes);
-
   // Returns whether the frame should be recorded for UKMs and UMA histograms.
   // A frame should be recorded if it has non-zero bytes or non-zero CPU usage
   // (or both).
@@ -363,9 +360,6 @@
   // The peak cpu usage for this frame tree.
   PeakCpuAggregator peak_cpu_;
 
-  // Memory usage by v8 in this ad frame tree.
-  MemoryUsageAggregator memory_usage_;
-
   // Owns weak pointers to the instance.
   base::WeakPtrFactory<FrameTreeData> weak_ptr_factory_{this};
 };
diff --git a/components/page_load_metrics/browser/observers/assert_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/assert_page_load_metrics_observer.h
index cce6d530..11bd5a5a 100644
--- a/components/page_load_metrics/browser/observers/assert_page_load_metrics_observer.h
+++ b/components/page_load_metrics/browser/observers/assert_page_load_metrics_observer.h
@@ -222,8 +222,6 @@
                          bool blocked_by_policy,
                          page_load_metrics::StorageType access_type) override {}
   void OnPrefetchLikely() override {}
-  void OnV8MemoryChanged(const std::vector<page_load_metrics::MemoryUpdate>&
-                             memory_updates) override {}
   void OnSharedStorageWorkletHostCreated() override {}
   void OnSharedStorageSelectURLCalled() override {}
   void OnCustomUserTimingMarkObserved(
diff --git a/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.cc
index b58def9b..bceee72 100644
--- a/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.cc
+++ b/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.cc
@@ -32,11 +32,11 @@
     "PageLoad.PaintTiming.NavigationToFirstPaint.BFCachePolyfillThird";
 const char kHistogramFirstInputDelayAfterBackForwardCacheRestore[] =
     "PageLoad.InteractiveTiming.FirstInputDelay.AfterBackForwardCacheRestore";
-extern const char
+const char
     kHistogramCumulativeShiftScoreMainFrameAfterBackForwardCacheRestore[] =
         "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame."
         "AfterBackForwardCacheRestore";
-extern const char kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore[] =
+const char kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore[] =
     "PageLoad.LayoutInstability.CumulativeShiftScore."
     "AfterBackForwardCacheRestore";
 
@@ -427,9 +427,6 @@
           page_load_metrics::features::
               kBackForwardCacheEmitZeroSamplesForKeyMetrics)) {
     base::UmaHistogramCounts100(
-        "PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame",
-        page_load_metrics::LayoutShiftUmaValue(layout_main_frame_shift_score));
-    base::UmaHistogramCounts100(
         "PageLoad.LayoutInstability.CumulativeShiftScore",
         page_load_metrics::LayoutShiftUmaValue(layout_shift_score));
   }
diff --git a/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.h
index 56b7f397..839ae73 100644
--- a/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.h
+++ b/components/page_load_metrics/browser/observers/back_forward_cache_page_load_metrics_observer.h
@@ -43,9 +43,6 @@
     kHistogramThirdRequestAnimationFrameAfterBackForwardCacheRestore[];
 extern const char kHistogramFirstInputDelayAfterBackForwardCacheRestore[];
 extern const char kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore[];
-extern const char
-    kHistogramCumulativeShiftScoreMainFrameAfterBackForwardCacheRestore[];
-extern const char kHistogramCumulativeShiftScoreAfterBackForwardCacheRestore[];
 
 }  // namespace internal
 
diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc
index e78e434..aa2325b 100644
--- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc
+++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc
@@ -12,7 +12,6 @@
 #include <string_view>
 #include <utility>
 
-#include "base/byte_count.h"
 #include "base/feature_list.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
@@ -24,7 +23,6 @@
 #include "components/metrics/metrics_data_validation.h"
 #include "components/page_load_metrics/browser/features.h"
 #include "components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
 #include "components/page_load_metrics/browser/page_load_metrics_util.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/preloading_data.h"
@@ -159,14 +157,6 @@
     "PageLoad.ParseTiming.NavigationToParseStart";
 const char kBackgroundHistogramParseStart[] =
     "PageLoad.ParseTiming.NavigationToParseStart.Background";
-const char kHistogramParseBlockedOnScriptLoad[] =
-    "PageLoad.ParseTiming.ParseBlockedOnScriptLoad";
-const char kBackgroundHistogramParseBlockedOnScriptLoad[] =
-    "PageLoad.ParseTiming.ParseBlockedOnScriptLoad.Background";
-const char kHistogramParseBlockedOnScriptExecution[] =
-    "PageLoad.ParseTiming.ParseBlockedOnScriptExecution";
-const char kHistogramParseBlockedOnScriptExecutionDocumentWrite[] =
-    "PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite";
 
 const char kHistogramFirstContentfulPaintNoStore[] =
     "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.NoStore";
@@ -215,10 +205,6 @@
 const char kHistogramFirstForeground[] =
     "PageLoad.PageTiming.NavigationToFirstForeground";
 
-const char kHistogramUserGestureNavigationToForwardBack[] =
-    "PageLoad.PageTiming.ForegroundDuration.PageEndReason."
-    "ForwardBackNavigation.UserGesture";
-
 const char kHistogramForegroundToFirstContentfulPaint[] =
     "PageLoad.PaintTiming.ForegroundToFirstContentfulPaint";
 
@@ -233,11 +219,6 @@
     "PageLoad.Experimental.PageTiming.NavigationToFirstSubresourceLoadStart";
 const char kHistogramResourceLoadTimePrefix[] =
     "PageLoad.Experimental.PageTiming.ResourceLoadTime.";
-const char kHistogramTotalSubresourceLoadTimeAtFirstContentfulPaint[] =
-    "PageLoad.Experimental.PageTiming."
-    "TotalSubresourceLoadTimeAtFirstContentfulPaint";
-const char kHistogramFirstEligibleToPaintToFirstPaint[] =
-    "PageLoad.Experimental.PaintTiming.FirstEligibleToPaintToFirstPaint";
 
 const char kHistogramPageLoadCpuTotalUsage[] = "PageLoad.Cpu.TotalUsage";
 const char kHistogramPageLoadCpuTotalUsageForegrounded[] =
@@ -245,8 +226,6 @@
 
 const char kHistogramInputToNavigation[] =
     "PageLoad.Experimental.InputTiming.InputToNavigationStart";
-const char kBackgroundHistogramInputToNavigation[] =
-    "PageLoad.Experimental.InputTiming.InputToNavigationStart.Background";
 const char kHistogramInputToNavigationLinkClick[] =
     "PageLoad.Experimental.InputTiming.InputToNavigationStart.FromLinkClick";
 const char kHistogramInputToNavigationOmnibox[] =
@@ -266,8 +245,6 @@
 const char kHistogramNavigationTimingNavigationStartToFirstLoaderCallback[] =
     "PageLoad.Experimental.NavigationTiming."
     "NavigationStartToFirstLoaderCallback";
-const char kHistogramNavigationTimingNavigationStartToFinalRequestStart[] =
-    "PageLoad.Experimental.NavigationTiming.NavigationStartToFinalRequestStart";
 const char kHistogramNavigationTimingNavigationStartToFinalResponseStart[] =
     "PageLoad.Experimental.NavigationTiming."
     "NavigationStartToFinalResponseStart";
@@ -296,14 +273,6 @@
         "PageLoad.Experimental.NavigationTiming."
         "FinalLoaderCallbackToNavigationCommitSent";
 
-// V8 memory usage metrics.
-const char kHistogramMemoryMainframe[] =
-    "PageLoad.Experimental.Memory.Core.MainFrame.Max";
-const char kHistogramMemorySubframeAggregate[] =
-    "PageLoad.Experimental.Memory.Core.Subframe.Aggregate.Max";
-const char kHistogramMemoryTotal[] =
-    "PageLoad.Experimental.Memory.Core.Total.Max";
-
 }  // namespace internal
 
 UmaPageLoadMetricsObserver::UmaPageLoadMetricsObserver()
@@ -330,8 +299,7 @@
 UmaPageLoadMetricsObserver::OnFencedFramesStart(
     content::NavigationHandle* navigation_handle,
     const GURL& currently_committed_url) {
-  // This class needs forwarding for the events OnLoadedResource and
-  // OnV8MemoryChanged.
+  // This class needs forwarding for OnLoadedResource.
   return FORWARD_OBSERVING;
 }
 
@@ -406,12 +374,6 @@
           timing.paint_timing->first_paint, GetDelegate())) {
     PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstPaint,
                         timing.paint_timing->first_paint.value());
-    if (timing.paint_timing->first_eligible_to_paint) {
-      PAGE_LOAD_HISTOGRAM(
-          internal::kHistogramFirstEligibleToPaintToFirstPaint,
-          timing.paint_timing->first_paint.value() -
-              timing.paint_timing->first_eligible_to_paint.value());
-    }
   } else {
     PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramFirstPaint,
                         timing.paint_timing->first_paint.value());
@@ -448,10 +410,6 @@
           timing.paint_timing->first_contentful_paint.value());
     }
 
-    PAGE_LOAD_HISTOGRAM(
-        internal::kHistogramTotalSubresourceLoadTimeAtFirstContentfulPaint,
-        total_subresource_load_time_);
-
     // Emit a trace event to highlight a long navigation to first contentful
     // paint.
     if (timing.paint_timing->first_contentful_paint.value() >
@@ -564,10 +522,6 @@
         internal::kBackgroundHistogramParseStartToFirstContentfulPaint,
         timing.paint_timing->first_contentful_paint.value() -
             timing.parse_timing->parse_start.value());
-    if (timing.input_to_navigation_start) {
-      PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramInputToNavigation,
-                          timing.input_to_navigation_start.value());
-    }
 
     PAGE_LOAD_HISTOGRAM(
         internal::
@@ -643,29 +597,6 @@
   }
 }
 
-void UmaPageLoadMetricsObserver::OnParseStop(
-    const page_load_metrics::mojom::PageLoadTiming& timing) {
-  if (page_load_metrics::WasStartedInForegroundOptionalEventInForeground(
-          timing.parse_timing->parse_stop, GetDelegate())) {
-    PAGE_LOAD_HISTOGRAM(
-        internal::kHistogramParseBlockedOnScriptLoad,
-        timing.parse_timing->parse_blocked_on_script_load_duration.value());
-    PAGE_LOAD_HISTOGRAM(
-        internal::kHistogramParseBlockedOnScriptExecution,
-        timing.parse_timing->parse_blocked_on_script_execution_duration
-            .value());
-    PAGE_LOAD_HISTOGRAM(
-        internal::kHistogramParseBlockedOnScriptExecutionDocumentWrite,
-        timing.parse_timing
-            ->parse_blocked_on_script_execution_from_document_write_duration
-            .value());
-  } else {
-    PAGE_LOAD_HISTOGRAM(
-        internal::kBackgroundHistogramParseBlockedOnScriptLoad,
-        timing.parse_timing->parse_blocked_on_script_load_duration.value());
-  }
-}
-
 void UmaPageLoadMetricsObserver::OnComplete(
     const page_load_metrics::mojom::PageLoadTiming& timing) {
   RecordNavigationTimingHistograms();
@@ -673,7 +604,6 @@
   RecordByteAndResourceHistograms(timing);
   RecordCpuUsageHistograms();
   RecordForegroundDurationHistograms(timing, base::TimeTicks());
-  RecordV8MemoryHistograms();
 }
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
@@ -688,7 +618,6 @@
     RecordTimingHistograms(timing);
     RecordByteAndResourceHistograms(timing);
     RecordCpuUsageHistograms();
-    RecordV8MemoryHistograms();
   }
   RecordForegroundDurationHistograms(timing, base::TimeTicks::Now());
   return STOP_OBSERVING;
@@ -843,9 +772,6 @@
       timing.first_loader_callback_time - navigation_start_time);
 
   PAGE_LOAD_HISTOGRAM(
-      internal::kHistogramNavigationTimingNavigationStartToFinalRequestStart,
-      timing.final_request_start_time - navigation_start_time);
-  PAGE_LOAD_HISTOGRAM(
       internal::kHistogramNavigationTimingNavigationStartToFinalResponseStart,
       timing.final_response_start_time - navigation_start_time);
   PAGE_LOAD_HISTOGRAM(
@@ -1036,14 +962,6 @@
         internal::kHistogramPageTimingForegroundDurationNoCommit,
         foreground_duration.value());
   }
-
-  if (GetDelegate().GetPageEndReason() == page_load_metrics::END_FORWARD_BACK &&
-      GetDelegate().GetUserInitiatedInfo().user_gesture &&
-      !GetDelegate().GetUserInitiatedInfo().browser_initiated &&
-      GetDelegate().GetTimeToPageEnd() <= foreground_duration) {
-    PAGE_LOAD_HISTOGRAM(internal::kHistogramUserGestureNavigationToForwardBack,
-                        GetDelegate().GetTimeToPageEnd().value());
-  }
 }
 
 void UmaPageLoadMetricsObserver::OnCpuTimingUpdate(
@@ -1091,50 +1009,6 @@
       internal::PageLoadBackForwardCacheEvent::kRestoreFromBackForwardCache);
 }
 
-void UmaPageLoadMetricsObserver::OnV8MemoryChanged(
-    const std::vector<page_load_metrics::MemoryUpdate>& memory_updates) {
-  DCHECK(base::FeatureList::IsEnabled(
-      page_load_metrics::features::kV8PerFrameMemoryMonitoring));
-
-  for (const auto& update : memory_updates) {
-    memory_update_received_ = true;
-
-    content::RenderFrameHost* render_frame_host =
-        content::RenderFrameHost::FromID(update.routing_id);
-
-    if (!render_frame_host) {
-      continue;
-    }
-
-    if (!render_frame_host->GetParentOrOuterDocument()) {
-      // |render_frame_host| is the outermost main frame.
-      main_frame_memory_usage_.UpdateUsage(update.delta_bytes);
-    } else {
-      aggregate_subframe_memory_usage_.UpdateUsage(update.delta_bytes);
-    }
-
-    aggregate_total_memory_usage_.UpdateUsage(update.delta_bytes);
-  }
-}
-
-void UmaPageLoadMetricsObserver::RecordV8MemoryHistograms() {
-  if (base::FeatureList::IsEnabled(
-          page_load_metrics::features::kV8PerFrameMemoryMonitoring)) {
-    PAGE_BYTES_HISTOGRAM(internal::kHistogramMemoryMainframe,
-                         main_frame_memory_usage_.max_bytes_used());
-    PAGE_BYTES_HISTOGRAM(internal::kHistogramMemorySubframeAggregate,
-                         aggregate_subframe_memory_usage_.max_bytes_used());
-    PAGE_BYTES_HISTOGRAM(internal::kHistogramMemoryTotal,
-                         aggregate_total_memory_usage_.max_bytes_used());
-  }
-}
-
-void UmaPageLoadMetricsObserver::MemoryUsage::UpdateUsage(
-    base::ByteCount delta_bytes) {
-  current_bytes_used_ += delta_bytes;
-  max_bytes_used_ = std::max(max_bytes_used_, current_bytes_used_);
-}
-
 // Perfetto trace events for page load events need to be in sync with UMA
 // histogram data for metric accuracy; they are recorded together accordingly.
 // Navigation ID is used to join all related trace events.
diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h
index 9e493b43..2ebdc689 100644
--- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h
+++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.h
@@ -27,6 +27,7 @@
         [];
 extern const char
     kHistogramUserInteractionLatencyHighPercentile2MaxEventDuration[];
+
 extern const char
     kHistogramSumOfUserInteractionLatencyOverBudgetMaxEventDuration[];
 extern const char kHistogramWorstUserInteractionLatencyMaxEventDuration[];
@@ -47,8 +48,6 @@
 extern const char kHistogramLargestContentfulPaintCrossSiteSubFrame[];
 extern const char
     kHistogramLargestContentfulPaintSetSpeculationRulesPrerender[];
-extern const char kHistogramParseBlockedOnScriptLoad[];
-extern const char kHistogramParseBlockedOnScriptExecution[];
 
 extern const char kBackgroundHistogramFirstContentfulPaint[];
 extern const char kBackgroundHistogramFirstImagePaint[];
@@ -67,8 +66,6 @@
 extern const char kHistogramLoadTypeParseStartForwardBack[];
 extern const char kHistogramLoadTypeParseStartNewNavigation[];
 
-extern const char kHistogramUserGestureNavigationToForwardBack[];
-
 extern const char kHistogramPageTimingForegroundDuration[];
 extern const char kHistogramPageTimingForegroundDurationNoCommit[];
 
@@ -76,14 +73,11 @@
 extern const char kHistogramCommitSentToFirstSubresourceLoadStart[];
 extern const char kHistogramNavigationToFirstSubresourceLoadStart[];
 extern const char kHistogramResourceLoadTimePrefix[];
-extern const char kHistogramTotalSubresourceLoadTimeAtFirstContentfulPaint[];
-extern const char kHistogramFirstEligibleToPaintToFirstPaint[];
 
 extern const char kHistogramPageLoadCpuTotalUsage[];
 extern const char kHistogramPageLoadCpuTotalUsageForegrounded[];
 
 extern const char kHistogramInputToNavigation[];
-extern const char kBackgroundHistogramInputToNavigation[];
 extern const char kHistogramInputToNavigationLinkClick[];
 extern const char kHistogramInputToNavigationOmnibox[];
 extern const char kHistogramInputToFirstContentfulPaint[];
@@ -97,8 +91,6 @@
 extern const char
     kHistogramNavigationTimingNavigationStartToFirstLoaderCallback[];
 extern const char
-    kHistogramNavigationTimingNavigationStartToFinalRequestStart[];
-extern const char
     kHistogramNavigationTimingNavigationStartToFinalResponseStart[];
 extern const char
     kHistogramNavigationTimingNavigationStartToFinalLoaderCallback[];
@@ -117,11 +109,6 @@
 extern const char
     kHistogramNavigationTimingFinalLoaderCallbackToNavigationCommitSent[];
 
-// V8 memory usage metrics.
-extern const char kHistogramMemoryMainframe[];
-extern const char kHistogramMemorySubframeAggregate[];
-extern const char kHistogramMemoryTotal[];
-
 // Please keep in sync with PageLoadBackForwardCacheEvent in
 // tools/metrics/histograms/enums.xml. These values should not be renumbered.
 enum class PageLoadBackForwardCacheEvent {
@@ -173,8 +160,6 @@
       const page_load_metrics::mojom::PageLoadTiming& timing) override;
   void OnParseStart(
       const page_load_metrics::mojom::PageLoadTiming& timing) override;
-  void OnParseStop(
-      const page_load_metrics::mojom::PageLoadTiming& timing) override;
   void OnComplete(
       const page_load_metrics::mojom::PageLoadTiming& timing) override;
   void OnFailedProvisionalLoad(
@@ -199,23 +184,8 @@
   void OnRestoreFromBackForwardCache(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       content::NavigationHandle* navigation_handle) override;
-  void OnV8MemoryChanged(const std::vector<page_load_metrics::MemoryUpdate>&
-                             memory_updates) override;
 
  private:
-  // Class to keep track of per-frame memory usage by V8.
-  class MemoryUsage {
-   public:
-    void UpdateUsage(base::ByteCount delta_bytes);
-
-    base::ByteCount current_bytes_used() { return current_bytes_used_; }
-    base::ByteCount max_bytes_used() { return max_bytes_used_; }
-
-   private:
-    base::ByteCount current_bytes_used_;
-    base::ByteCount max_bytes_used_;
-  };
-
   void RecordNavigationTimingHistograms();
   void RecordTimingHistograms(
       const page_load_metrics::mojom::PageLoadTiming& main_frame_timing);
@@ -225,7 +195,6 @@
   void RecordForegroundDurationHistograms(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       base::TimeTicks app_background_time);
-  void RecordV8MemoryHistograms();
   void RecordNormalizedResponsivenessMetrics();
 
   void EmitFCPTraceEvent(base::TimeDelta first_contentful_paint_timing);
@@ -257,15 +226,6 @@
   // Tracks user input clicks for possible click burst.
   page_load_metrics::ClickInputTracker click_tracker_;
 
-  // V8 Memory Usage: whether a memory update was received, the usage of the
-  // mainframe, the aggregate usage of all subframes on the page, and the
-  // aggregate usage of all frames on the page (including the main frame),
-  // respectively.
-  bool memory_update_received_ = false;
-  MemoryUsage main_frame_memory_usage_;
-  MemoryUsage aggregate_subframe_memory_usage_;
-  MemoryUsage aggregate_total_memory_usage_;
-
   bool received_first_subresource_load_ = false;
   base::TimeDelta total_subresource_load_time_;
 };
diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc
index 14e6ba06..479154f 100644
--- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc
+++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc
@@ -10,14 +10,12 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/power_monitor_test.h"
-#include "base/test/scoped_feature_list.h"
 #include "base/test/test_trace_processor.h"
 #include "base/time/time.h"
 #include "components/page_load_metrics/browser/features.h"
 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
 #include "components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h"
 #include "components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
 #include "components/page_load_metrics/browser/page_load_metrics_util.h"
 #include "components/page_load_metrics/browser/page_load_tracker.h"
 #include "components/page_load_metrics/common/test/page_load_metrics_test_util.h"
@@ -88,8 +86,6 @@
   }
 
   void SetUp() override {
-    scoped_feature_list_.InitAndEnableFeature(
-        page_load_metrics::features::kV8PerFrameMemoryMonitoring);
     page_load_metrics::PageLoadMetricsObserverContentTestHarness::SetUp();
     page_load_metrics::LargestContentfulPaintHandler::SetTestMode(true);
     WebContentsObserver::Observe(web_contents());
@@ -167,20 +163,12 @@
     return tester()->histogram_tester();
   }
 
-  void SimulateV8MemoryChange(content::RenderFrameHost* render_frame_host,
-                              base::ByteCount delta_bytes) {
-    tester()->SimulateMemoryUpdate(render_frame_host, delta_bytes);
-  }
-
   void DidStartNavigation(
       content::NavigationHandle* navigation_handle) override {
     last_navigation_id_ = navigation_handle->GetNavigationId();
   }
 
   int64_t last_navigation_id_ = -1;
-
- private:
-  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 INSTANTIATE_TEST_SUITE_P(All, UmaPageLoadMetricsObserverTest, testing::Bool());
@@ -239,15 +227,6 @@
   tester()->histogram_tester().ExpectTotalCount(
       internal::kHistogramDomContentLoaded, 0);
   tester()->histogram_tester().ExpectTotalCount(internal::kHistogramLoad, 0);
-  tester()->histogram_tester().ExpectBucketCount(
-      internal::kHistogramParseBlockedOnScriptLoad,
-      parse_script_load_duration.InMilliseconds(), 1);
-  tester()->histogram_tester().ExpectBucketCount(
-      internal::kHistogramParseBlockedOnScriptExecution,
-      parse_script_exec_duration.InMilliseconds(), 1);
-  tester()->histogram_tester().ExpectTotalCount(
-      internal::kHistogramFirstImagePaint, 0);
-
   tester()->histogram_tester().ExpectTotalCount(
       internal::kHistogramPageTimingForegroundDuration, 1);
 }
@@ -643,9 +622,7 @@
       internal::kHistogramNavigationTimingNavigationStartToFirstRequestStart,
       internal::kHistogramNavigationTimingNavigationStartToFirstResponseStart,
       internal::kHistogramNavigationTimingNavigationStartToFirstLoaderCallback,
-      internal::kHistogramNavigationTimingNavigationStartToFinalRequestStart,
       internal::kHistogramNavigationTimingNavigationStartToFinalResponseStart,
-      internal::kHistogramNavigationTimingNavigationStartToFinalLoaderCallback,
       internal::
           kHistogramNavigationTimingNavigationStartToNavigationCommitSent};
   for (const char* metric : metrics_from_navigation_start)
@@ -658,8 +635,6 @@
           kHistogramNavigationTimingFirstResponseStartToFirstLoaderCallback,
       internal::kHistogramNavigationTimingFinalRequestStartToFinalResponseStart,
       internal::
-          kHistogramNavigationTimingFinalResponseStartToFinalLoaderCallback,
-      internal::
           kHistogramNavigationTimingFinalLoaderCallbackToNavigationCommitSent};
   for (const char* metric : metrics_between_milestones)
     tester()->histogram_tester().ExpectTotalCount(metric, 1);
@@ -1241,170 +1216,6 @@
       internal::kHistogramFirstInputTimestamp, 0);
 }
 
-TEST_P(UmaPageLoadMetricsObserverTest, NavigationToBackNavigationWithGesture) {
-  GURL url(kDefaultTestUrl);
-
-  // Navigate once to the page with a user gesture.
-  auto simulator =
-      content::NavigationSimulator::CreateRendererInitiated(url, main_rfh());
-  simulator->SetHasUserGesture(true);
-  simulator->Commit();
-
-  // Now the user presses the back button.
-  tester()->NavigateWithPageTransitionAndCommit(
-      url, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORWARD_BACK));
-
-  tester()->histogram_tester().ExpectTotalCount(
-      internal::kHistogramUserGestureNavigationToForwardBack, 1);
-}
-
-TEST_P(UmaPageLoadMetricsObserverTest,
-       BrowserNavigationToBackNavigationWithGesture) {
-  GURL url(kDefaultTestUrl);
-
-  // Navigate once to the page with a user gesture.
-  auto simulator =
-      content::NavigationSimulator::CreateBrowserInitiated(url, web_contents());
-  simulator->SetHasUserGesture(true);
-  simulator->Commit();
-
-  // Now the user presses the back button.
-  tester()->NavigateWithPageTransitionAndCommit(
-      url, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORWARD_BACK));
-
-  tester()->histogram_tester().ExpectTotalCount(
-      internal::kHistogramUserGestureNavigationToForwardBack, 0);
-}
-
-TEST_P(UmaPageLoadMetricsObserverTest,
-       NavigationToBackNavigationWithoutGesture) {
-  GURL url(kDefaultTestUrl);
-
-  // Navigate once to the page with a user gesture.
-  auto simulator =
-      content::NavigationSimulator::CreateRendererInitiated(url, main_rfh());
-  simulator->SetHasUserGesture(false);
-  simulator->Commit();
-
-  // Now the user presses the back button.
-  tester()->NavigateWithPageTransitionAndCommit(
-      url, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORWARD_BACK));
-
-  tester()->histogram_tester().ExpectTotalCount(
-      internal::kHistogramUserGestureNavigationToForwardBack, 0);
-}
-
-TEST_P(UmaPageLoadMetricsObserverTest,
-       AbortedNavigationToBackNavigationWithGesture) {
-  GURL url(kDefaultTestUrl);
-
-  // Navigate once to the page with a user gesture.
-  auto simulator =
-      content::NavigationSimulator::CreateRendererInitiated(url, main_rfh());
-  simulator->SetHasUserGesture(true);
-  simulator->Start();
-
-  // Now the user presses the back button before the first navigation committed.
-  tester()->NavigateWithPageTransitionAndCommit(
-      url, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORWARD_BACK));
-
-  tester()->histogram_tester().ExpectTotalCount(
-      internal::kHistogramUserGestureNavigationToForwardBack, 1);
-}
-
-TEST_P(UmaPageLoadMetricsObserverTest, MainFrame_MaxMemoryBytesRecorded) {
-  // Commit the main frame and a subframe.
-  NavigateAndCommit(GURL(kDefaultTestUrl));
-
-  // Notify that memory measurements are available for the main frame.
-  SimulateV8MemoryChange(main_rfh(), base::KiB(100));
-
-  // Simulate positive and negative shifts to memory usage and ensure the
-  // maximum value is properly tracked.
-  SimulateV8MemoryChange(main_rfh(), base::KiB(50));
-  SimulateV8MemoryChange(main_rfh(), base::KiB(-150));
-
-  // Navigate again to force histogram recording.
-  NavigateAndCommit(GURL(kDefaultTestUrl2));
-
-  histogram_tester().ExpectUniqueSample(internal::kHistogramMemoryMainframe,
-                                        150, 1);
-  histogram_tester().ExpectUniqueSample(
-      internal::kHistogramMemorySubframeAggregate, 0, 1);
-  histogram_tester().ExpectUniqueSample(internal::kHistogramMemoryTotal, 150,
-                                        1);
-}
-
-TEST_P(UmaPageLoadMetricsObserverTest, SingleSubFrame_MaxMemoryBytesRecorded) {
-  // Commit the main frame and a subframe.
-  NavigateAndCommit(GURL(kDefaultTestUrl));
-
-  RenderFrameHost* subframe = AppendChildFrameAndNavigateAndCommit(
-      web_contents()->GetPrimaryMainFrame(), "subframe",
-      GURL("https://google.com/subframe.html"));
-
-  // Notify that memory measurements are available for each frame.
-  SimulateV8MemoryChange(main_rfh(), base::KiB(100));
-  SimulateV8MemoryChange(subframe, base::KiB(10));
-
-  // Simulate positive and negative shifts to memory usage and ensure the
-  // maximum value is properly tracked.
-  SimulateV8MemoryChange(subframe, base::KiB(30));
-  SimulateV8MemoryChange(subframe, base::KiB(-20));
-
-  // Navigate again to force histogram recording.
-  NavigateAndCommit(GURL(kDefaultTestUrl2));
-
-  histogram_tester().ExpectUniqueSample(internal::kHistogramMemoryMainframe,
-                                        100, 1);
-  histogram_tester().ExpectUniqueSample(
-      internal::kHistogramMemorySubframeAggregate, 40, 1);
-  histogram_tester().ExpectUniqueSample(internal::kHistogramMemoryTotal, 140,
-                                        1);
-}
-
-TEST_P(UmaPageLoadMetricsObserverTest, MultiSubFrames_MaxMemoryBytesRecorded) {
-  // Commit the main frame and a subframe.
-  NavigateAndCommit(GURL(kDefaultTestUrl));
-
-  RenderFrameHost* subframe1 = AppendChildFrameAndNavigateAndCommit(
-      web_contents()->GetPrimaryMainFrame(), "subframe1",
-      GURL("https://google.com/subframe.html"));
-  RenderFrameHost* subframe2 = AppendChildFrameAndNavigateAndCommit(
-      web_contents()->GetPrimaryMainFrame(), "subframe2",
-      GURL("https://google.com/subframe2.html"));
-  RenderFrameHost* subframe3 = AppendChildFrameAndNavigateAndCommit(
-      subframe2, "subframe3", GURL("https://google.com/subframe3.html"));
-
-  // Notify that memory measurements are available for each frame.
-  SimulateV8MemoryChange(main_rfh(), base::KiB(500));
-  SimulateV8MemoryChange(subframe1, base::KiB(10));
-  SimulateV8MemoryChange(subframe2, base::KiB(20));
-  SimulateV8MemoryChange(subframe3, base::KiB(30));
-
-  // Simulate positive and negative shifts to memory usage and ensure the
-  // maximum value is properly tracked.
-  SimulateV8MemoryChange(main_rfh(), base::KiB(100));
-  SimulateV8MemoryChange(subframe1, base::KiB(5));
-  SimulateV8MemoryChange(subframe1, base::KiB(-2));
-  SimulateV8MemoryChange(subframe2, base::KiB(5));
-  SimulateV8MemoryChange(subframe2, base::KiB(-2));
-  SimulateV8MemoryChange(main_rfh(), base::KiB(-200));
-  SimulateV8MemoryChange(subframe3, base::KiB(5));
-  SimulateV8MemoryChange(subframe3, base::KiB(-2));
-
-  // Navigate again to force histogram recording.
-  NavigateAndCommit(GURL(kDefaultTestUrl2));
-
-  histogram_tester().ExpectUniqueSample(internal::kHistogramMemoryMainframe,
-                                        500 + 100, 1);
-  histogram_tester().ExpectUniqueSample(
-      internal::kHistogramMemorySubframeAggregate,
-      10 + 20 + 30 + 5 - 2 + 5 - 2 + 5, 1);
-  histogram_tester().ExpectUniqueSample(
-      internal::kHistogramMemoryTotal, 500 + 10 + 20 + 30 + 100 + 5 - 2 + 5, 1);
-}
-
 TEST_P(UmaPageLoadMetricsObserverTest,
        CrossSiteSubframeLargestContentfulPaint_SubframeLarger) {
   // Use the page having no subframes to record the passed LCP candidate.
diff --git a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc
index 88f7881..4d98630c 100644
--- a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc
+++ b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc
@@ -34,8 +34,6 @@
 
 namespace page_load_metrics {
 
-class PageLoadMetricsMemoryTracker;
-
 namespace {
 
 class TestPageLoadMetricsEmbedderInterface
@@ -82,12 +80,6 @@
 
   bool ShouldObserveScheme(std::string_view scheme) override { return false; }
 
-  page_load_metrics::PageLoadMetricsMemoryTracker*
-  GetMemoryTrackerForBrowserContext(
-      content::BrowserContext* browser_context) override {
-    return nullptr;
-  }
-
  private:
   raw_ptr<PageLoadMetricsObserverTester> test_;
 };
@@ -383,15 +375,4 @@
     register_callback_.Run(tracker);
 }
 
-void PageLoadMetricsObserverTester::SimulateMemoryUpdate(
-    content::RenderFrameHost* render_frame_host,
-    base::ByteCount delta_bytes) {
-  DCHECK(render_frame_host);
-  if (!delta_bytes.is_zero()) {
-    std::vector<MemoryUpdate> update(
-        {MemoryUpdate(render_frame_host->GetGlobalId(), delta_bytes)});
-    metrics_web_contents_observer_->OnV8MemoryChanged(update);
-  }
-}
-
 }  // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h b/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h
index 93cae18..70909fc1 100644
--- a/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h
+++ b/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h
@@ -15,14 +15,12 @@
 }  // namespace base
 
 namespace content {
-class BrowserContext;
 class NavigationHandle;
 class WebContents;
 }  // namespace content
 
 namespace page_load_metrics {
 
-class PageLoadMetricsMemoryTracker;
 class PageLoadTracker;
 
 // This class serves as a functional interface to various chrome// features.
@@ -41,11 +39,6 @@
   virtual bool IsNonTabWebUI(const GURL& url) = 0;
   virtual bool IsInternalWebUI(const GURL& url) = 0;
   virtual bool ShouldObserveScheme(std::string_view scheme) = 0;
-
-  // Returns the PageLoadMetricsMemoryTracker for the given BrowserContext if
-  // tracking is enabled.
-  virtual PageLoadMetricsMemoryTracker* GetMemoryTrackerForBrowserContext(
-      content::BrowserContext* browser_context) = 0;
 };
 
 }  // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/page_load_metrics_forward_observer.cc b/components/page_load_metrics/browser/page_load_metrics_forward_observer.cc
index 8c543c7..4db5f11f 100644
--- a/components/page_load_metrics/browser/page_load_metrics_forward_observer.cc
+++ b/components/page_load_metrics/browser/page_load_metrics_forward_observer.cc
@@ -479,13 +479,6 @@
 void PageLoadMetricsForwardObserver::DidActivatePreviewedPage(
     base::TimeTicks activation_time) {}
 
-void PageLoadMetricsForwardObserver::OnV8MemoryChanged(
-    const std::vector<MemoryUpdate>& memory_updates) {
-  if (!parent_observer_)
-    return;
-  parent_observer_->OnV8MemoryChanged(memory_updates);
-}
-
 void PageLoadMetricsForwardObserver::OnSharedStorageWorkletHostCreated() {
   if (!parent_observer_)
     return;
diff --git a/components/page_load_metrics/browser/page_load_metrics_forward_observer.h b/components/page_load_metrics/browser/page_load_metrics_forward_observer.h
index 77845aba..596e86f 100644
--- a/components/page_load_metrics/browser/page_load_metrics_forward_observer.h
+++ b/components/page_load_metrics/browser/page_load_metrics_forward_observer.h
@@ -185,8 +185,6 @@
   void DidActivatePrerenderedPage(
       content::NavigationHandle* navigation_handle) override;
   void DidActivatePreviewedPage(base::TimeTicks activation_time) override;
-  void OnV8MemoryChanged(
-      const std::vector<MemoryUpdate>& memory_updates) override;
   void OnSharedStorageWorkletHostCreated() override;
   void OnSharedStorageSelectURLCalled() override;
   void OnCustomUserTimingMarkObserved(
diff --git a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.cc b/components/page_load_metrics/browser/page_load_metrics_memory_tracker.cc
deleted file mode 100644
index 4ad1b7f..0000000
--- a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.cc
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
-
-#include <map>
-
-#include "base/byte_count.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
-#include "components/page_load_metrics/browser/features.h"
-#include "components/performance_manager/public/graph/frame_node.h"
-#include "components/performance_manager/public/graph/process_node.h"
-#include "components/performance_manager/public/render_frame_host_proxy.h"
-
-namespace page_load_metrics {
-
-namespace {
-
-using performance_manager::v8_memory::V8DetailedMemoryExecutionContextData;
-using performance_manager::v8_memory::V8DetailedMemoryProcessData;
-using performance_manager::v8_memory::V8DetailedMemoryRequest;
-
-// WeakPtrs cannot be used as the key to a map without a custom comparator, so
-// we use a raw pointer for the map key and bundle the WeakPtr in a struct
-// to be used as the value.
-struct ObserverWeakPtrAndMemoryUpdates {
-  base::WeakPtr<MetricsWebContentsObserver> weak_ptr;
-  std::vector<MemoryUpdate> updates;
-  ObserverWeakPtrAndMemoryUpdates(
-      base::WeakPtr<MetricsWebContentsObserver> wk_ptr,
-      MemoryUpdate update)
-      : weak_ptr(wk_ptr) {
-    updates.emplace_back(update);
-  }
-};
-
-}  // namespace
-
-// Results of the V8PerAdFrameMemoryPollParamsStudy indicated that at the
-// ~99.8th percentile, collecting at 10-second or 60-second intervals
-// yields nearly equivalent results, as does using kBounded or kLazy mode.
-// As there is about 10% to 20% overhead total GC time, we chose the less
-// aggressive kLazy mode with a 60-second polling interval.
-// For further results please see crbug.com/1116087.
-PageLoadMetricsMemoryTracker::PageLoadMetricsMemoryTracker() {
-  if (base::FeatureList::IsEnabled(
-          page_load_metrics::features::kV8PerFrameMemoryMonitoring)) {
-    memory_request_ = std::make_unique<V8DetailedMemoryRequest>(
-        base::Seconds(60), V8DetailedMemoryRequest::MeasurementMode::kLazy);
-    memory_request_->AddObserver(this);
-    memory_request_->StartMeasurement();
-  }
-}
-
-PageLoadMetricsMemoryTracker::~PageLoadMetricsMemoryTracker() = default;
-
-void PageLoadMetricsMemoryTracker::Shutdown() {
-  if (memory_request_) {
-    memory_request_->RemoveObserver(this);
-    memory_request_.reset();
-  }
-}
-
-void PageLoadMetricsMemoryTracker::OnV8MemoryMeasurementAvailable(
-    const performance_manager::ProcessNode* process_node,
-    const V8DetailedMemoryProcessData* process_data) {
-  std::map<MetricsWebContentsObserver*, ObserverWeakPtrAndMemoryUpdates>
-      memory_update_map;
-
-  // Iterate through frames with available measurements.
-  for (const performance_manager::FrameNode* frame_node :
-       process_node->GetFrameNodes()) {
-    const auto* frame_data =
-        V8DetailedMemoryExecutionContextData::ForFrameNode(frame_node);
-    if (!frame_data) {
-      continue;
-    }
-
-    content::RenderFrameHost* rfh = frame_node->GetRenderFrameHostProxy().Get();
-
-    // We lose a small amount of data due to a RenderFrameHost
-    // sometimes no longer being alive by the time that a report is received.
-    // UMA suggests we miss about 0.078% of updates on desktop and about 0.11%
-    // on mobile (as measured 10/30/2020).
-    // See crbug.com/1116087.
-    if (!rfh) {
-      continue;
-    }
-
-    base::ByteCount delta_bytes =
-        UpdateMemoryUsageAndGetDelta(rfh, frame_data->v8_memory_used());
-
-    // Only send updates that are nontrivial.
-    if (delta_bytes.is_zero()) {
-      continue;
-    }
-
-    // Note that at this point, we are guaranteed that the frame is alive, and
-    // frames cannot exist without an owning WebContents.
-    content::WebContents* web_contents =
-        content::WebContents::FromRenderFrameHost(rfh);
-    MetricsWebContentsObserver* observer =
-        MetricsWebContentsObserver::FromWebContents(web_contents);
-
-    if (!observer) {
-      continue;
-    }
-
-    auto emplace_pair = memory_update_map.emplace(std::make_pair(
-        observer, ObserverWeakPtrAndMemoryUpdates(
-                      observer->AsWeakPtr(),
-                      MemoryUpdate(rfh->GetGlobalId(), delta_bytes))));
-
-    if (!emplace_pair.second) {
-      emplace_pair.first->second.updates.emplace_back(rfh->GetGlobalId(),
-                                                      delta_bytes);
-    }
-  }
-
-  // Dispatch memory updates to each observer. Note that we store references to
-  // MetricsWebContentsObservers as weakptrs. This is done to ensure that if a
-  // WebContents was torn down synchronously as the result of a memory update
-  // in a different WebContents, we would not have a dangling pointer.
-  for (const auto& map_pair : memory_update_map) {
-    MetricsWebContentsObserver* observer = map_pair.second.weak_ptr.get();
-
-    if (!observer) {
-      continue;
-    }
-
-    observer->OnV8MemoryChanged(map_pair.second.updates);
-  }
-}
-
-void PageLoadMetricsMemoryTracker::OnRenderFrameDeleted(
-    content::RenderFrameHost* render_frame_host,
-    MetricsWebContentsObserver* observer) {
-  DCHECK(render_frame_host);
-  DCHECK(observer);
-
-  auto it = per_frame_memory_usage_map_.find(render_frame_host->GetRoutingID());
-
-  if (it == per_frame_memory_usage_map_.end()) {
-    return;
-  }
-
-  // The routing id for |render_frame_host| has been found in our usage map.
-  // We assume that the renderer has released the frame and that its
-  // contents will be picked up by the next GC. So for all intents and
-  // purposes, the memory is freed at this point, and we remove the entry from
-  // our usage map and notify observers of the delta.
-  base::ByteCount delta_bytes = -it->second;
-  per_frame_memory_usage_map_.erase(it);
-
-  // Only send updates that are nontrivial.
-  if (delta_bytes.is_zero()) {
-    return;
-  }
-
-  std::vector<MemoryUpdate> update(
-      {MemoryUpdate(render_frame_host->GetGlobalId(), delta_bytes)});
-  observer->OnV8MemoryChanged(update);
-}
-
-base::ByteCount PageLoadMetricsMemoryTracker::UpdateMemoryUsageAndGetDelta(
-    content::RenderFrameHost* render_frame_host,
-    base::ByteCount current_bytes_used) {
-  DCHECK(render_frame_host);
-
-  base::ByteCount delta_bytes = current_bytes_used;
-  int routing_id = render_frame_host->GetRoutingID();
-  auto it = per_frame_memory_usage_map_.find(routing_id);
-
-  if (it != per_frame_memory_usage_map_.end()) {
-    delta_bytes -= it->second;
-    it->second = current_bytes_used;
-  } else {
-    per_frame_memory_usage_map_[routing_id] = current_bytes_used;
-  }
-
-  return delta_bytes;
-}
-
-}  // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.h b/components/page_load_metrics/browser/page_load_metrics_memory_tracker.h
deleted file mode 100644
index a531bb1..0000000
--- a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.h
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_MEMORY_TRACKER_H_
-#define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_MEMORY_TRACKER_H_
-
-#include "base/byte_count.h"
-#include "base/containers/flat_map.h"
-#include "base/feature_list.h"
-#include "components/keyed_service/core/keyed_service.h"
-#include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
-#include "components/performance_manager/public/v8_memory/v8_detailed_memory.h"
-#include "content/public/browser/render_frame_host.h"
-
-namespace performance_manager {
-class ProcessNode;
-}
-
-namespace page_load_metrics {
-
-// PageLoadMetricsMemoryTracker tracks per-frame memory usage by V8 and
-// forwards an individual per-frame measurement to the
-// MetricsWebContentsObserver associated with the WebContents containing that
-// frame.
-class PageLoadMetricsMemoryTracker
-    : public KeyedService,
-      public performance_manager::v8_memory::V8DetailedMemoryObserver {
- public:
-  PageLoadMetricsMemoryTracker();
-  ~PageLoadMetricsMemoryTracker() override;
-  PageLoadMetricsMemoryTracker(const PageLoadMetricsMemoryTracker&) = delete;
-  PageLoadMetricsMemoryTracker& operator=(const PageLoadMetricsMemoryTracker&) =
-      delete;
-
-  // KeyedService:
-  void Shutdown() override;
-
-  // performance_manager::v8_memory::V8DetailedMemoryObserver:
-  void OnV8MemoryMeasurementAvailable(
-      const performance_manager::ProcessNode* process_node,
-      const performance_manager::v8_memory::V8DetailedMemoryProcessData*
-          process_data) override;
-
-  // Removes the entry for a deleted frame from `per_frame_memory_usage_map_`.
-  void OnRenderFrameDeleted(content::RenderFrameHost* render_frame_host,
-                            MetricsWebContentsObserver* observer);
-
- private:
-  base::ByteCount UpdateMemoryUsageAndGetDelta(
-      content::RenderFrameHost* render_frame_host,
-      base::ByteCount current_bytes_used);
-
-  // Tracks the most recent per-frame measurements by frame routing id.
-  base::flat_map<int, base::ByteCount> per_frame_memory_usage_map_;
-
-  // Allows receipt of per-frame V8 memory measurements once instantiated
-  // and PageLoadMetricsMemoryTracker is added as an observer.
-  std::unique_ptr<performance_manager::v8_memory::V8DetailedMemoryRequest>
-      memory_request_;
-};
-
-}  // namespace page_load_metrics
-
-#endif  // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_MEMORY_TRACKER_H_
diff --git a/components/page_load_metrics/browser/page_load_metrics_memory_tracker_unittest.cc b/components/page_load_metrics/browser/page_load_metrics_memory_tracker_unittest.cc
deleted file mode 100644
index bd5876f2..0000000
--- a/components/page_load_metrics/browser/page_load_metrics_memory_tracker_unittest.cc
+++ /dev/null
@@ -1,307 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
-
-#include <memory>
-
-#include "base/byte_count.h"
-#include "base/containers/flat_map.h"
-#include "base/memory/raw_ptr.h"
-#include "base/memory/singleton.h"
-#include "base/memory/weak_ptr.h"
-#include "base/test/scoped_feature_list.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
-#include "components/page_load_metrics/browser/features.h"
-#include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
-#include "components/page_load_metrics/browser/page_load_metrics_embedder_base.h"
-#include "components/page_load_metrics/browser/page_load_metrics_test_content_browser_client.h"
-#include "components/performance_manager/public/graph/frame_node.h"
-#include "components/performance_manager/public/graph/process_node.h"
-#include "components/performance_manager/public/performance_manager.h"
-#include "components/performance_manager/public/v8_memory/v8_detailed_memory.h"
-#include "components/performance_manager/test_support/performance_manager_test_harness.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/common/content_client.h"
-#include "content/public/test/navigation_simulator.h"
-#include "content/public/test/test_renderer_host.h"
-#include "content/public/test/test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using performance_manager::v8_memory::V8DetailedMemoryExecutionContextData;
-using performance_manager::v8_memory::V8DetailedMemoryProcessData;
-
-const char kMainUrl[] = "https://main.com/";
-const char kSubUrl[] = "https://foo.com/";
-const char kOtherSubUrl[] = "https://bar.com/";
-
-namespace page_load_metrics {
-
-namespace {
-
-class TestPageLoadMetricsEmbedder
-    : public page_load_metrics::PageLoadMetricsEmbedderBase {
- public:
-  explicit TestPageLoadMetricsEmbedder(content::WebContents* web_contents)
-      : PageLoadMetricsEmbedderBase(web_contents) {}
-  TestPageLoadMetricsEmbedder(const TestPageLoadMetricsEmbedder&) = delete;
-  TestPageLoadMetricsEmbedder& operator=(const TestPageLoadMetricsEmbedder&) =
-      delete;
-  ~TestPageLoadMetricsEmbedder() override = default;
-
-  // page_load_metrics::PageLoadMetricsEmbedderBase:
-  bool IsNewTabPageUrl(const GURL& url) override { return false; }
-  bool IsNoStatePrefetch(content::WebContents* web_contents) override {
-    return false;
-  }
-  bool IsExtensionUrl(const GURL& url) override { return false; }
-  bool IsNonTabWebUI(const GURL& url) override { return false; }
-
-  page_load_metrics::PageLoadMetricsMemoryTracker*
-  GetMemoryTrackerForBrowserContext(
-      content::BrowserContext* browser_context) override {
-    if (!base::FeatureList::IsEnabled(features::kV8PerFrameMemoryMonitoring)) {
-      return nullptr;
-    }
-
-    return &memory_tracker_;
-  }
-
- private:
-  page_load_metrics::PageLoadMetricsMemoryTracker memory_tracker_;
-};
-
-class TestMetricsWebContentsObserver : public MetricsWebContentsObserver {
- public:
-  TestMetricsWebContentsObserver(
-      content::WebContents* web_contents,
-      std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface)
-      : MetricsWebContentsObserver(web_contents,
-                                   std::move(embedder_interface)) {}
-
-  int num_updates_received() const { return num_updates_received_; }
-
-  const base::flat_map<int, base::ByteCount>& last_memory_deltas_received()
-      const {
-    return last_memory_deltas_received_;
-  }
-
-  void OnV8MemoryChanged(
-      const std::vector<MemoryUpdate>& memory_updates) override {
-    for (const auto& update : memory_updates) {
-      num_updates_received_++;
-
-      int routing_id = update.routing_id.frame_routing_id;
-      auto it = last_memory_deltas_received_.find(routing_id);
-      if (it == last_memory_deltas_received_.end()) {
-        last_memory_deltas_received_[routing_id] = update.delta_bytes;
-      } else {
-        it->second = update.delta_bytes;
-      }
-    }
-  }
-
- private:
-  base::flat_map<int, base::ByteCount> last_memory_deltas_received_;
-  int num_updates_received_ = 0;
-};
-
-class PageLoadMetricsMemoryTrackerTest
-    : public performance_manager::PerformanceManagerTestHarness {
- public:
-  PageLoadMetricsMemoryTrackerTest() = default;
-  ~PageLoadMetricsMemoryTrackerTest() override = default;
-  PageLoadMetricsMemoryTrackerTest(const PageLoadMetricsMemoryTrackerTest&) =
-      delete;
-  PageLoadMetricsMemoryTrackerTest& operator=(
-      const PageLoadMetricsMemoryTrackerTest&) = delete;
-
-  void SetUp() override {
-    scoped_feature_list_.InitAndEnableFeature(
-        features::kV8PerFrameMemoryMonitoring);
-
-    performance_manager::PerformanceManagerTestHarness::SetUp();
-    original_browser_client_ =
-        content::SetBrowserClientForTesting(&browser_client_);
-
-    // Create a WebContents backed by Performance Manager objects.
-    SetContents(CreateTestWebContents());
-
-    auto embedder_interface =
-        std::make_unique<TestPageLoadMetricsEmbedder>(web_contents());
-    embedder_interface_ = embedder_interface.get();
-    observer_ = new TestMetricsWebContentsObserver(
-        web_contents(), std::move(embedder_interface));
-    web_contents()->SetUserData(TestMetricsWebContentsObserver::UserDataKey(),
-                                base::WrapUnique(observer_.get()));
-
-    tracker_ = embedder_interface_->GetMemoryTrackerForBrowserContext(
-        browser_context());
-  }
-
-  void TearDown() override {
-    content::SetBrowserClientForTesting(original_browser_client_);
-    tracker_->Shutdown();
-    performance_manager::PerformanceManagerTestHarness::TearDown();
-  }
-
-  // Returns the final RenderFrameHost after navigation commits.
-  content::RenderFrameHost* NavigateFrame(const std::string& url,
-                                          content::RenderFrameHost* frame) {
-    auto navigation_simulator =
-        content::NavigationSimulator::CreateRendererInitiated(GURL(url), frame);
-    navigation_simulator->Commit();
-    return navigation_simulator->GetFinalRenderFrameHost();
-  }
-
-  // Returns the final RenderFrameHost after navigation commits.
-  content::RenderFrameHost* NavigateMainFrame(const std::string& url) {
-    return NavigateFrame(url, web_contents()->GetPrimaryMainFrame());
-  }
-
-  // Returns the final RenderFrameHost after navigation commits.
-  content::RenderFrameHost* CreateAndNavigateSubFrame(
-      const std::string& url,
-      content::RenderFrameHost* parent) {
-    content::RenderFrameHost* subframe =
-        content::RenderFrameHostTester::For(parent)->AppendChild("frame_name");
-    auto navigation_simulator =
-        content::NavigationSimulator::CreateRendererInitiated(GURL(url),
-                                                              subframe);
-    navigation_simulator->Commit();
-
-    return navigation_simulator->GetFinalRenderFrameHost();
-  }
-
-  void SimulateMemoryMeasurementUpdate(
-      content::RenderFrameHost* render_frame_host,
-      base::ByteCount bytes) {
-    if (!render_frame_host || !render_frame_host->GetProcess()) {
-      return;
-    }
-
-    base::WeakPtr<performance_manager::FrameNode> frame_node =
-        performance_manager::PerformanceManager::GetFrameNodeForRenderFrameHost(
-            render_frame_host);
-    ASSERT_TRUE(frame_node);
-    const performance_manager::ProcessNode* process_node =
-        frame_node->GetProcessNode();
-    ASSERT_TRUE(process_node);
-
-    V8DetailedMemoryExecutionContextData::CreateForTesting(frame_node.get())
-        ->set_v8_memory_used(base::ByteCount(bytes));
-    V8DetailedMemoryProcessData process_data;
-    tracker_->OnV8MemoryMeasurementAvailable(process_node, &process_data);
-  }
-
-  int num_updates_received() const { return observer_->num_updates_received(); }
-
-  const base::flat_map<int, base::ByteCount>& last_memory_deltas_received()
-      const {
-    return observer_->last_memory_deltas_received();
-  }
-
- protected:
-  raw_ptr<PageLoadMetricsMemoryTracker, DanglingUntriaged> tracker_;
-
- private:
-  base::test::ScopedFeatureList scoped_feature_list_;
-  raw_ptr<TestMetricsWebContentsObserver, DanglingUntriaged> observer_;
-  raw_ptr<TestPageLoadMetricsEmbedder, DanglingUntriaged> embedder_interface_;
-  PageLoadMetricsTestContentBrowserClient browser_client_;
-  raw_ptr<content::ContentBrowserClient> original_browser_client_ = nullptr;
-};
-
-}  // namespace
-
-TEST_F(PageLoadMetricsMemoryTrackerTest,
-       InitialUpdatesOnly_CorrectDeltasReceived) {
-  content::RenderFrameHost* main_frame = NavigateMainFrame(kMainUrl);
-  int main_id = main_frame->GetRoutingID();
-  content::RenderFrameHost* sub_frame1 =
-      CreateAndNavigateSubFrame(kSubUrl, main_frame);
-  int sub_frame1_id = sub_frame1->GetRoutingID();
-
-  // Create a nested subframe with the same origin as its parent.
-  content::RenderFrameHost* sub_frame2 =
-      CreateAndNavigateSubFrame(kOtherSubUrl, sub_frame1);
-  int sub_frame2_id = sub_frame2->GetRoutingID();
-
-  SimulateMemoryMeasurementUpdate(main_frame, base::KiB(100));
-  SimulateMemoryMeasurementUpdate(sub_frame1, base::KiB(200));
-  SimulateMemoryMeasurementUpdate(sub_frame2, base::KiB(300));
-
-  auto deltas_received = last_memory_deltas_received();
-  EXPECT_EQ(3, num_updates_received());
-  ASSERT_EQ(3UL, deltas_received.size());
-
-  EXPECT_TRUE(deltas_received.find(main_id) != deltas_received.end());
-  EXPECT_EQ(base::KiB(100), deltas_received[main_id]);
-  EXPECT_TRUE(deltas_received.find(sub_frame1_id) != deltas_received.end());
-  EXPECT_EQ(base::KiB(200), deltas_received[sub_frame1_id]);
-  EXPECT_TRUE(deltas_received.find(sub_frame2_id) != deltas_received.end());
-  EXPECT_EQ(base::KiB(300), deltas_received[sub_frame2_id]);
-}
-
-TEST_F(PageLoadMetricsMemoryTrackerTest, SecondUpdates_CorrectDeltasReceived) {
-  content::RenderFrameHost* main_frame = NavigateMainFrame(kMainUrl);
-  int main_id = main_frame->GetRoutingID();
-  content::RenderFrameHost* sub_frame1 =
-      CreateAndNavigateSubFrame(kSubUrl, main_frame);
-  int sub_frame1_id = sub_frame1->GetRoutingID();
-
-  // Create a nested subframe with the same origin as its parent.
-  content::RenderFrameHost* sub_frame2 =
-      CreateAndNavigateSubFrame(kOtherSubUrl, sub_frame1);
-  int sub_frame2_id = sub_frame2->GetRoutingID();
-
-  SimulateMemoryMeasurementUpdate(main_frame, base::KiB(100));
-  SimulateMemoryMeasurementUpdate(sub_frame1, base::KiB(200));
-  SimulateMemoryMeasurementUpdate(sub_frame2, base::KiB(300));
-
-  // Simulate second round of updates.
-  SimulateMemoryMeasurementUpdate(main_frame, base::KiB(50));
-  SimulateMemoryMeasurementUpdate(sub_frame1, base::KiB(300));
-  SimulateMemoryMeasurementUpdate(sub_frame2, base::KiB(100));
-
-  auto deltas_received = last_memory_deltas_received();
-  EXPECT_EQ(6, num_updates_received());
-  ASSERT_EQ(3UL, deltas_received.size());
-
-  EXPECT_TRUE(deltas_received.find(main_id) != deltas_received.end());
-  EXPECT_EQ(base::KiB(-50), deltas_received[main_id]);
-  EXPECT_TRUE(deltas_received.find(sub_frame1_id) != deltas_received.end());
-  EXPECT_EQ(base::KiB(100), deltas_received[sub_frame1_id]);
-  EXPECT_TRUE(deltas_received.find(sub_frame2_id) != deltas_received.end());
-  EXPECT_EQ(base::KiB(-200), deltas_received[sub_frame2_id]);
-}
-
-TEST_F(PageLoadMetricsMemoryTrackerTest, FrameDeleted_CorrectDeltasReceived) {
-  content::RenderFrameHost* main_frame = NavigateMainFrame(kMainUrl);
-  int main_id = main_frame->GetRoutingID();
-  content::RenderFrameHost* sub_frame =
-      CreateAndNavigateSubFrame(kSubUrl, main_frame);
-  int sub_frame_id = sub_frame->GetRoutingID();
-
-  SimulateMemoryMeasurementUpdate(main_frame, base::KiB(100));
-  SimulateMemoryMeasurementUpdate(sub_frame, base::KiB(200));
-
-  content::RenderFrameDeletedObserver delete_observer(sub_frame);
-  // Delete |sub_frame| and refresh the usage map. An update should have been
-  // received that will make the usage corresponding to |sub_frame| zero.
-  content::RenderFrameHostTester::For(sub_frame)->Detach();
-  delete_observer.WaitUntilDeleted();
-
-  auto deltas_received = last_memory_deltas_received();
-  EXPECT_EQ(3, num_updates_received());
-  ASSERT_EQ(2UL, deltas_received.size());
-
-  EXPECT_TRUE(deltas_received.find(main_id) != deltas_received.end());
-  EXPECT_EQ(base::KiB(100), deltas_received[main_id]);
-  EXPECT_TRUE(deltas_received.find(sub_frame_id) != deltas_received.end());
-  EXPECT_EQ(base::KiB(-200), deltas_received[sub_frame_id]);
-}
-
-}  // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer.cc b/components/page_load_metrics/browser/page_load_metrics_observer.cc
index 5d27dee..7c28d6e2 100644
--- a/components/page_load_metrics/browser/page_load_metrics_observer.cc
+++ b/components/page_load_metrics/browser/page_load_metrics_observer.cc
@@ -11,10 +11,6 @@
 
 namespace page_load_metrics {
 
-MemoryUpdate::MemoryUpdate(content::GlobalRenderFrameHostId id,
-                           base::ByteCount delta)
-    : routing_id(id), delta_bytes(delta) {}
-
 ExtraRequestCompleteInfo::ExtraRequestCompleteInfo(
     const url::SchemeHostPort& final_url,
     const net::IPEndPoint& remote_endpoint,
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer.h b/components/page_load_metrics/browser/page_load_metrics_observer.h
index 93c4cfc..2f572d8 100644
--- a/components/page_load_metrics/browser/page_load_metrics_observer.h
+++ b/components/page_load_metrics/browser/page_load_metrics_observer.h
@@ -265,8 +265,6 @@
   void DidActivatePrerenderedPage(
       content::NavigationHandle* navigation_handle) override {}
   void DidActivatePreviewedPage(base::TimeTicks activation_time) override {}
-  void OnV8MemoryChanged(
-      const std::vector<MemoryUpdate>& memory_updates) override {}
   void OnSharedStorageWorkletHostCreated() override {}
   void OnSharedStorageSelectURLCalled() override {}
   void OnCustomUserTimingMarkObserved(
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer_interface.h b/components/page_load_metrics/browser/page_load_metrics_observer_interface.h
index b60312e..1e8a05b 100644
--- a/components/page_load_metrics/browser/page_load_metrics_observer_interface.h
+++ b/components/page_load_metrics/browser/page_load_metrics_observer_interface.h
@@ -123,13 +123,6 @@
   content::NavigationDiscardReason discard_reason;
 };
 
-// Struct for storing per-frame memory update data.
-struct MemoryUpdate {
-  content::GlobalRenderFrameHostId routing_id;
-  base::ByteCount delta_bytes;
-  MemoryUpdate(content::GlobalRenderFrameHostId id, base::ByteCount delta);
-};
-
 // Interface for PageLoadMetrics observers. Only PageLoadMetricsForwardObserver
 // should inherit this interface directly, and others should do
 // PageLoadMetricsObserver class.
@@ -635,12 +628,6 @@
   // Called when the previewed page is activated for the tab promotion.
   virtual void DidActivatePreviewedPage(base::TimeTicks activation_time) = 0;
 
-  // Called when V8 per-frame memory usage updates are available. Each
-  // MemoryUpdate consists of a GlobalRenderFrameHostId and a nonzero change in
-  // bytes used.
-  virtual void OnV8MemoryChanged(
-      const std::vector<MemoryUpdate>& memory_updates) = 0;
-
   // Called when a `SharedStorageWorkletHost` is created.
   virtual void OnSharedStorageWorkletHostCreated() = 0;
 
diff --git a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc
index 195679c..530c255f 100644
--- a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc
+++ b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc
@@ -85,8 +85,6 @@
       const gfx::Rect& main_frame_viewport_rect) override;
   void OnMainFrameAdRectsChanged(
       const base::flat_map<int, gfx::Rect>& main_frame_ad_rects) override;
-  void OnV8MemoryChanged(
-      const std::vector<MemoryUpdate>& memory_updates) override;
   void OnPageRenderDataUpdate(const mojom::FrameRenderDataUpdate& render_data,
                               bool is_main_frame) override;
   void OnComplete(const mojom::PageLoadTiming& timing) override;
@@ -232,11 +230,6 @@
   expected_minimum_aggregate_cpu_time_ = minimum;
 }
 
-void PageLoadMetricsTestWaiter::AddMemoryUpdateExpectation(
-    content::GlobalRenderFrameHostId routing_id) {
-  expected_.memory_update_frame_ids_.insert(routing_id);
-}
-
 void PageLoadMetricsTestWaiter::AddLoadingBehaviorExpectation(
     int behavior_flags) {
   expected_.loading_behavior_flags_ |= behavior_flags;
@@ -489,15 +482,6 @@
     run_loop_->Quit();
 }
 
-void PageLoadMetricsTestWaiter::OnV8MemoryChanged(
-    const std::vector<MemoryUpdate>& memory_updates) {
-  for (const auto& update : memory_updates)
-    observed_.memory_update_frame_ids_.insert(update.routing_id);
-
-  if (ExpectationsSatisfied() && run_loop_)
-    run_loop_->Quit();
-}
-
 void PageLoadMetricsTestWaiter::FrameSizeChanged(
     content::RenderFrameHost* render_frame_host,
     const gfx::Size& frame_size) {
@@ -731,10 +715,6 @@
   return observed_.did_observed_main_frame_ad_rects_;
 }
 
-bool PageLoadMetricsTestWaiter::MemoryUpdateExpectationsSatisfied() const {
-  return IsSubset(expected_.memory_update_frame_ids_,
-                  observed_.memory_update_frame_ids_);
-}
 bool PageLoadMetricsTestWaiter::LayoutShiftExpectationsSatisfied() const {
   return expected_.num_layout_shifts_ <= observed_.num_layout_shifts_;
 }
@@ -805,7 +785,6 @@
          MainFrameIntersectionExpectationsSatisfied() &&
          MainFrameViewportRectExpectationsSatisfied() &&
          MainFrameAdRectsExpectationsSatisfied() &&
-         MemoryUpdateExpectationsSatisfied() &&
          LayoutShiftExpectationsSatisfied() &&
          NumInteractionsExpectationsSatisfied() &&
          NumLargestContentfulPaintImageSatisfied() &&
@@ -830,7 +809,6 @@
   EXPECT_TRUE(CpuTimeExpectationsSatisfied());
   EXPECT_TRUE(MainFrameIntersectionExpectationsSatisfied());
   EXPECT_TRUE(MainFrameViewportRectExpectationsSatisfied());
-  EXPECT_TRUE(MemoryUpdateExpectationsSatisfied());
 }
 
 void PageLoadMetricsTestWaiter::ResetExpectations() {
@@ -959,13 +937,6 @@
   }
 }
 
-void WaiterMetricsObserver::OnV8MemoryChanged(
-    const std::vector<MemoryUpdate>& memory_updates) {
-  if (waiter_) {
-    waiter_->OnV8MemoryChanged(memory_updates);
-  }
-}
-
 void WaiterMetricsObserver::OnPageRenderDataUpdate(
     const mojom::FrameRenderDataUpdate& render_data,
     bool is_main_frame) {
diff --git a/components/page_load_metrics/browser/page_load_metrics_test_waiter.h b/components/page_load_metrics/browser/page_load_metrics_test_waiter.h
index 998700d..44fccaa3 100644
--- a/components/page_load_metrics/browser/page_load_metrics_test_waiter.h
+++ b/components/page_load_metrics/browser/page_load_metrics_test_waiter.h
@@ -112,10 +112,6 @@
   // Add aggregate time spent in cpu for page expectation.
   void AddMinimumAggregateCpuTimeExpectation(base::TimeDelta minimum);
 
-  // Inserts `routing_id` into `expected_.memory_update_frame_ids_`, the set of
-  // frame routing IDs expected to receive a memory measurement update.
-  void AddMemoryUpdateExpectation(content::GlobalRenderFrameHostId routing_id);
-
   // Adds all |blink::LoadingBehaviorFlag|s set in |behavior_flags| to the
   // set of expected behaviors.
   void AddLoadingBehaviorExpectation(int behavior_flags);
@@ -312,9 +308,6 @@
 
   void OnComplete(const mojom::PageLoadTiming& timing);
 
-  // Called when V8 per-frame memory usage updates are available.
-  void OnV8MemoryChanged(const std::vector<MemoryUpdate>& memory_updates);
-
   void OnTrackerCreated(page_load_metrics::PageLoadTracker* tracker) override;
 
   void OnCommit(page_load_metrics::PageLoadTracker* tracker) override;
@@ -332,7 +325,6 @@
   bool MainFrameIntersectionExpectationsSatisfied() const;
   bool MainFrameViewportRectExpectationsSatisfied() const;
   bool MainFrameAdRectsExpectationsSatisfied() const;
-  bool MemoryUpdateExpectationsSatisfied() const;
   bool LayoutShiftExpectationsSatisfied() const;
   bool NumInteractionsExpectationsSatisfied() const;
   bool NumLargestContentfulPaintImageSatisfied() const;
@@ -363,9 +355,6 @@
     bool did_observed_main_frame_ad_rects_ = false;
     std::vector<gfx::Rect> main_frame_intersections_;
     std::optional<gfx::Rect> main_frame_viewport_rect_;
-    std::unordered_set<content::GlobalRenderFrameHostId,
-                       content::GlobalRenderFrameHostIdHasher>
-        memory_update_frame_ids_;
     uint64_t num_layout_shifts_ = 0;
     bool on_complete_ = false;
   };
diff --git a/components/page_load_metrics/browser/page_load_tracker.cc b/components/page_load_metrics/browser/page_load_tracker.cc
index 42be9f78..bc50374 100644
--- a/components/page_load_metrics/browser/page_load_tracker.cc
+++ b/components/page_load_metrics/browser/page_load_tracker.cc
@@ -23,7 +23,6 @@
 #include "components/page_load_metrics/browser/observers/assert_page_load_metrics_observer.h"
 #include "components/page_load_metrics/browser/page_load_metrics_embedder_interface.h"
 #include "components/page_load_metrics/browser/page_load_metrics_forward_observer.h"
-#include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
 #include "components/page_load_metrics/browser/page_load_metrics_observer.h"
 #include "components/page_load_metrics/browser/page_load_metrics_util.h"
 #include "components/page_load_metrics/common/page_load_timing.h"
@@ -1459,13 +1458,6 @@
   page_end_time_ = base::TimeTicks();
 }
 
-void PageLoadTracker::OnV8MemoryChanged(
-    const std::vector<MemoryUpdate>& memory_updates) {
-  for (const auto& observer : observers_) {
-    observer->OnV8MemoryChanged(memory_updates);
-  }
-}
-
 void PageLoadTracker::OnSharedStorageWorkletHostCreated() {
   for (const auto& observer : observers_) {
     observer->OnSharedStorageWorkletHostCreated();
diff --git a/components/page_load_metrics/browser/page_load_tracker.h b/components/page_load_metrics/browser/page_load_tracker.h
index 12bd050..e0985fc 100644
--- a/components/page_load_metrics/browser/page_load_tracker.h
+++ b/components/page_load_metrics/browser/page_load_tracker.h
@@ -43,7 +43,6 @@
 
 namespace page_load_metrics {
 
-struct MemoryUpdate;
 class PageLoadMetricsEmbedderInterface;
 
 namespace internal {
@@ -438,9 +437,6 @@
   // Called when the previewed page was activated for the tab promotion.
   void DidActivatePreviewedPage(base::TimeTicks activation_time);
 
-  // Called when V8 per-frame memory usage updates are available.
-  void OnV8MemoryChanged(const std::vector<MemoryUpdate>& memory_updates);
-
   // Called when a `SharedStorageWorkletHost` is created.
   void OnSharedStorageWorkletHostCreated();
 
diff --git a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc
index 09cf0477..c7ef9d2 100644
--- a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc
+++ b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc
@@ -247,10 +247,4 @@
   return false;
 }
 
-PageLoadMetricsMemoryTracker*
-TestMetricsWebContentsObserverEmbedder::GetMemoryTrackerForBrowserContext(
-    content::BrowserContext* browser_context) {
-  return nullptr;
-}
-
 }  // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h
index 7dc50ab5..540dd63 100644
--- a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h
+++ b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h
@@ -16,8 +16,6 @@
 
 namespace page_load_metrics {
 
-class PageLoadMetricsMemoryTracker;
-
 class TestMetricsWebContentsObserverEmbedder
     : public PageLoadMetricsEmbedderInterface,
       public test::WeakMockTimerProvider {
@@ -36,8 +34,6 @@
   bool IsNonTabWebUI(const GURL& url) override;
   bool IsInternalWebUI(const GURL& url) override;
   bool ShouldObserveScheme(std::string_view scheme) override;
-  PageLoadMetricsMemoryTracker* GetMemoryTrackerForBrowserContext(
-      content::BrowserContext* browser_context) override;
 
   void set_is_ntp(bool is_ntp) { is_ntp_ = is_ntp; }
 
diff --git a/components/password_manager/core/browser/import/password_importer.cc b/components/password_manager/core/browser/import/password_importer.cc
index 7faaa2c9..88986ce6 100644
--- a/components/password_manager/core/browser/import/password_importer.cc
+++ b/components/password_manager/core/browser/import/password_importer.cc
@@ -28,7 +28,6 @@
 #include "components/password_manager/core/common/password_manager_constants.h"
 #include "components/password_manager/services/csv_password/csv_password_parser_service.h"
 
-using password_manager::ImportEntry;
 namespace password_manager {
 
 IncomingPasswords::IncomingPasswords() = default;
@@ -159,15 +158,15 @@
   if (password.empty()) {
     return base::unexpected(with_status(ImportEntry::Status::MISSING_PASSWORD));
   }
-  if (password.length() > 1000) {
+  if (password.length() > constants::kMaxPasswordLengthForImport) {
     return base::unexpected(with_status(ImportEntry::Status::LONG_PASSWORD));
   }
 
-  if (csv_password.GetUsername().length() > 1000) {
+  if (csv_password.GetUsername().length() > constants::kMaxUsernameLengthForImport) {
     return base::unexpected(with_status(ImportEntry::Status::LONG_USERNAME));
   }
 
-  if (csv_password.GetNote().length() > 1000) {
+  if (csv_password.GetNote().length() > constants::kMaxPasswordNoteLength) {
     return base::unexpected(with_status(ImportEntry::Status::LONG_NOTE));
   }
 
@@ -176,7 +175,7 @@
         return with_status(error.empty() ? ImportEntry::Status::MISSING_URL
                                          : ImportEntry::Status::INVALID_URL);
       });
-  if (url.spec().length() > 2048) {
+  if (url.spec().length() > constants::kMaxUrlLengthForImport) {
     return base::unexpected(with_status(ImportEntry::Status::LONG_URL));
   }
   if (!IsValidPasswordURL(url)) {
diff --git a/components/password_manager/core/browser/import/password_importer_unittest.cc b/components/password_manager/core/browser/import/password_importer_unittest.cc
index 5cc6314..240c460 100644
--- a/components/password_manager/core/browser/import/password_importer_unittest.cc
+++ b/components/password_manager/core/browser/import/password_importer_unittest.cc
@@ -282,7 +282,7 @@
 }
 
 TEST_F(PasswordImporterTest, CSVImportLongNote) {
-  std::string long_note = std::string(1001, '*');
+  std::string long_note = std::string(constants::kMaxPasswordNoteLength + 1, '*');
   std::string kTestCSVInput = std::string("Url,Username,Password,Notes\n") +
                               "https://test.com,test@gmail.com,pwd," +
                               long_note + "\n";
@@ -810,7 +810,8 @@
 }
 
 TEST_F(PasswordImporterTest, CSVImportLongURLReported) {
-  std::string long_url = "https://" + std::string(2048, 'a') + ".com";
+  std::string long_url =
+      "https://" + std::string(constants::kMaxUrlLengthForImport, 'a') + ".com";
   std::string kTestCSVInput =
       "Url,Username,Password\n" + long_url + ",test@gmail.com,test1   \n";
 
@@ -840,7 +841,8 @@
 }
 
 TEST_F(PasswordImporterTest, CSVImportLongPassword) {
-  std::string long_password = "https://" + std::string(1001, '*') + ".com";
+  std::string long_password =
+      std::string(constants::kMaxPasswordLengthForImport + 1, '*');
   std::string kTestCSVInput = std::string("Url,Username,Password\n") +
                               "https://test.com,test@gmail.com," +
                               long_password + "\n";
@@ -870,7 +872,8 @@
 }
 
 TEST_F(PasswordImporterTest, CSVImportLongUsername) {
-  std::string long_username = "https://" + std::string(1001, '*') + ".com";
+  std::string long_username =
+      std::string(constants::kMaxUsernameLengthForImport + 1, 'a');
   std::string kTestCSVInput = std::string("Url,Username,Password\n") +
                               "https://test.com," + long_username +
                               ",password\n";
diff --git a/components/password_manager/core/browser/passkey_credential.cc b/components/password_manager/core/browser/passkey_credential.cc
index b2050877..43b6cf8 100644
--- a/components/password_manager/core/browser/passkey_credential.cc
+++ b/components/password_manager/core/browser/passkey_credential.cc
@@ -54,6 +54,11 @@
                   base::Time::FromMillisecondsSinceUnixEpoch(
                       passkey.creation_time()))
             : std::nullopt,
+        passkey.has_last_used_time_windows_epoch_micros()
+            ? std::make_optional(
+                  base::Time::FromDeltaSinceWindowsEpoch(base::Microseconds(
+                      passkey.last_used_time_windows_epoch_micros())))
+            : std::nullopt,
         passkey.hidden());
   }
   return ret;
@@ -80,6 +85,7 @@
                                      Username username,
                                      DisplayName display_name,
                                      std::optional<base::Time> creation_time,
+                                     std::optional<base::Time> last_used_time,
                                      bool hidden)
     : source_(source),
       rp_id_(std::move(rp_id)),
@@ -88,6 +94,7 @@
       username_(std::move(username)),
       display_name_(std::move(display_name)),
       creation_time_(std::move(creation_time)),
+      last_used_time_(std::move(last_used_time)),
       hidden_(hidden) {}
 
 PasskeyCredential::~PasskeyCredential() = default;
diff --git a/components/password_manager/core/browser/passkey_credential.h b/components/password_manager/core/browser/passkey_credential.h
index 0a8a124..f514ecf 100644
--- a/components/password_manager/core/browser/passkey_credential.h
+++ b/components/password_manager/core/browser/passkey_credential.h
@@ -55,6 +55,7 @@
                     DisplayName display_name = DisplayName(""),
                     // Must be provided for kAndroidPhone credentials.
                     std::optional<base::Time> creation_time = std::nullopt,
+                    std::optional<base::Time> last_used_time = std::nullopt,
                     bool hidden = false);
   ~PasskeyCredential();
 
@@ -81,6 +82,9 @@
   const std::optional<base::Time>& creation_time() const {
     return creation_time_;
   }
+  const std::optional<base::Time>& last_used_time() const {
+    return last_used_time_;
+  }
   bool hidden() const { return hidden_; }
 
  private:
@@ -119,6 +123,9 @@
   // UIs. This value is not available for passkeys from some sources.
   std::optional<base::Time> creation_time_;
 
+  // The time when the credential was last used, when known.
+  std::optional<base::Time> last_used_time_;
+
   // Indicates that the credential was marked for deletion (e.g. by a website)
   // and should be marked as such in management surfaces and hidden from
   // authentication surfaces.
diff --git a/components/password_manager/core/browser/passkey_credential_unittest.cc b/components/password_manager/core/browser/passkey_credential_unittest.cc
index ae41830..d92032c 100644
--- a/components/password_manager/core/browser/passkey_credential_unittest.cc
+++ b/components/password_manager/core/browser/passkey_credential_unittest.cc
@@ -31,12 +31,14 @@
 constexpr char kUserName1[] = "reimu";
 constexpr char kUserDisplayName1[] = "Reimu Hakurei";
 constexpr int kCreationEpochSecs1 = 1;
+constexpr int kLastUsedEpochSecs1 = 5;
 
 constexpr std::array<const uint8_t, 4> kCredentialId2 = {'e', 'f', 'g', 'h'};
 constexpr std::array<const uint8_t, 4> kUserId2 = {'5', '6', '7', '8'};
 constexpr char kUserName2[] = "marisa";
 constexpr char kUserDisplayName2[] = "Marisa Kirisame";
 constexpr int kCreationEpochSecs2 = 2;
+constexpr int kLastUsedEpochSecs2 = 6;
 
 constexpr std::array<const uint8_t, 4> kCredentialIdShadow1 = {'i', 'j', 'k'};
 constexpr std::array<const uint8_t, 4> kCredentialIdShadow2 = {'l', 'm', 'n'};
@@ -62,6 +64,8 @@
   credential1.set_user_name(kUserName1);
   credential1.set_user_display_name(kUserDisplayName1);
   credential1.set_creation_time(kCreationEpochSecs1 * 1000);
+  credential1.set_last_used_time_windows_epoch_micros(
+      base::Seconds(kLastUsedEpochSecs1).InMicroseconds());
 
   sync_pb::WebauthnCredentialSpecifics credential2;
   credential2.set_sync_id(base::RandBytesAsString(16));
@@ -71,6 +75,8 @@
   credential2.set_user_name(kUserName2);
   credential2.set_user_display_name(kUserDisplayName2);
   credential2.set_creation_time(kCreationEpochSecs2 * 1000);
+  credential2.set_last_used_time_windows_epoch_micros(
+      base::Seconds(kLastUsedEpochSecs2).InMicroseconds());
   credential2.set_hidden(true);
 
   // Shadow the first credential.
@@ -85,6 +91,8 @@
   credential1_shadow.add_newly_shadowed_credential_ids(
       credential1.credential_id());
   credential1_shadow.set_creation_time(kCreationEpochSecs1 * 1000);
+  credential1_shadow.set_last_used_time_windows_epoch_micros(
+      kLastUsedEpochSecs1 * 1000000);
 
   std::vector<PasskeyCredential> credentials =
       PasskeyCredential::FromCredentialSpecifics(std::vector{
@@ -104,6 +112,8 @@
                             PasskeyCredential::Username(kUserName1),
                             PasskeyCredential::DisplayName(kUserDisplayName1),
                             base::Time::FromTimeT(kCreationEpochSecs1),
+                            base::Time::FromDeltaSinceWindowsEpoch(
+                                base::Seconds(kLastUsedEpochSecs1)),
                             /*hidden=*/false),
           PasskeyCredential(
               PasskeyCredential::Source::kAndroidPhone,
@@ -113,6 +123,8 @@
               PasskeyCredential::Username(kUserName2),
               PasskeyCredential::DisplayName(kUserDisplayName2),
               base::Time::FromTimeT(kCreationEpochSecs2),
+              base::Time::FromDeltaSinceWindowsEpoch(
+                  base::Seconds(kLastUsedEpochSecs2)),
               /*hidden=*/true)));
 }
 
diff --git a/components/password_manager/core/common/password_manager_constants.h b/components/password_manager/core/common/password_manager_constants.h
index b7e47720..39e83712 100644
--- a/components/password_manager/core/common/password_manager_constants.h
+++ b/components/password_manager/core/common/password_manager_constants.h
@@ -22,6 +22,9 @@
 inline constexpr char kAutocompleteWebAuthn[] = "webauthn";
 
 inline constexpr int kMaxPasswordNoteLength = 1000;
+inline constexpr int kMaxPasswordLengthForImport = 1000;
+inline constexpr int kMaxUsernameLengthForImport = 1000;
+inline constexpr int kMaxUrlLengthForImport = 2048;
 inline constexpr int kMaxPasswordsPerCSVFile = 3000;
 
 inline constexpr base::TimeDelta kPasswordManagerAuthValidity =
diff --git a/components/password_manager/ios/shared_password_controller_unittest.mm b/components/password_manager/ios/shared_password_controller_unittest.mm
index cd3858e..a75ac4e 100644
--- a/components/password_manager/ios/shared_password_controller_unittest.mm
+++ b/components/password_manager/ios/shared_password_controller_unittest.mm
@@ -88,7 +88,7 @@
 using ::testing::Return;
 
 const std::string kTestURL = "https://www.chromium.org/";
-NSString* kTestFrameID = @"11111111111111111111111111111111";
+NSString* const kTestFrameID = @"11111111111111111111111111111111";
 constexpr uint64_t kMaxPasswordLength = 10;
 constexpr char16_t kGeneratedPassword[] = u"testpassword";
 
diff --git a/components/policy/test_support/fake_dmserver.cc b/components/policy/test_support/fake_dmserver.cc
index 021b4921..3ab945ef 100644
--- a/components/policy/test_support/fake_dmserver.cc
+++ b/components/policy/test_support/fake_dmserver.cc
@@ -11,6 +11,7 @@
 #include "base/files/file_util.h"
 #include "base/json/json_file_value_serializer.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/notreached.h"
 #include "base/scoped_observation.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/components/regional_capabilities/regional_capabilities_metrics.cc b/components/regional_capabilities/regional_capabilities_metrics.cc
index 7c3704b5..388dacc 100644
--- a/components/regional_capabilities/regional_capabilities_metrics.cc
+++ b/components/regional_capabilities/regional_capabilities_metrics.cc
@@ -6,6 +6,7 @@
 
 #include "base/containers/flat_map.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/metrics/puma_histogram_functions.h"
 #include "base/notreached.h"
 #include "base/strings/strcat.h"
 #include "components/country_codes/country_codes.h"
@@ -79,18 +80,27 @@
 void RecordFunnelStage(FunnelStage stage) {
   base::UmaHistogramEnumeration("RegionalCapabilities.FunnelStage.Reported",
                                 stage);
+  base::PumaHistogramEnumeration(
+      base::PumaType::kRc, "PUMA.RegionalCapabilities.FunnelStage.Reported",
+      stage);
 }
 
 void RecordEligibilityFunnelStageDetails(
     SearchEngineChoiceScreenConditions conditions) {
   base::UmaHistogramEnumeration("RegionalCapabilities.FunnelStage.Eligibility",
                                 conditions);
+  base::PumaHistogramEnumeration(
+      base::PumaType::kRc, "PUMA.RegionalCapabilities.FunnelStage.Eligibility",
+      conditions);
 }
 
 void RecordTriggeringFunnelStageDetails(
     SearchEngineChoiceScreenConditions conditions) {
   base::UmaHistogramEnumeration("RegionalCapabilities.FunnelStage.Triggering",
                                 conditions);
+  base::PumaHistogramEnumeration(
+      base::PumaType::kRc, "PUMA.RegionalCapabilities.FunnelStage.Triggering",
+      conditions);
 }
 
 void RecordActiveRegionalProgram(
diff --git a/components/regional_capabilities/regional_capabilities_switches.cc b/components/regional_capabilities/regional_capabilities_switches.cc
index a5eac523..8a0428f 100644
--- a/components/regional_capabilities/regional_capabilities_switches.cc
+++ b/components/regional_capabilities/regional_capabilities_switches.cc
@@ -11,11 +11,6 @@
 namespace switches {
 
 #if BUILDFLAG(IS_ANDROID)
-// Mitigate overlap cases between the legacy search engine promo and the
-// device-based program eligibility determinations.
-BASE_FEATURE(kMitigateLegacySearchEnginePromoOverlap,
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 BASE_FEATURE(kRestrictLegacySearchEnginePromoOnFormFactors,
              base::FEATURE_ENABLED_BY_DEFAULT);
 
diff --git a/components/regional_capabilities/regional_capabilities_switches.h b/components/regional_capabilities/regional_capabilities_switches.h
index b3c1699..6731567 100644
--- a/components/regional_capabilities/regional_capabilities_switches.h
+++ b/components/regional_capabilities/regional_capabilities_switches.h
@@ -40,10 +40,6 @@
 inline constexpr char kEeaListCountryOverride[] = "EEA_ALL";
 
 #if BUILDFLAG(IS_ANDROID)
-// Mitigate overlap cases between the legacy search engine promo and the
-// device-based program eligibility determinations.
-BASE_DECLARE_FEATURE(kMitigateLegacySearchEnginePromoOverlap);
-
 // Ensure that the legacy search engine promos don't trigger on out of
 // scope device types.
 BASE_DECLARE_FEATURE(kRestrictLegacySearchEnginePromoOnFormFactors);
diff --git a/components/reporting/storage/storage_unittest.cc b/components/reporting/storage/storage_unittest.cc
index 66242a2..4904767 100644
--- a/components/reporting/storage/storage_unittest.cc
+++ b/components/reporting/storage/storage_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "components/reporting/storage/storage.h"
 
+#include <array>
 #include <atomic>
 #include <cstdint>
 #include <optional>
@@ -11,7 +12,9 @@
 #include <utility>
 
 #include "base/compiler_specific.h"
+#include "base/containers/auto_spanification_helper.h"
 #include "base/containers/flat_map.h"
+#include "base/containers/span_writer.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/functional/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
@@ -567,7 +570,7 @@
                      std::move(processed_cb));
         return;
       }
-      // Decrypt encrypted_record asynhcronously, then resume on the current
+      // Decrypt encrypted_record asynchronously, then resume on the current
       // sequence.
       (new SingleDecryptionContext(
            encrypted_record, decryptor_,
@@ -957,46 +960,44 @@
     ASSERT_OK(c_result) << c_result;
   }
 
+  template <size_t N>
+  std::string_view Uint8ArrayToStringView(const std::array<uint8_t, N>& arr) {
+    return std::string_view(reinterpret_cast<const char*>(arr.data()),
+                            arr.size());
+  }
+
   SignedEncryptionInfo GenerateAndSignKey() {
     CHECK(decryptor_) << "Decryptor not created";
     // Generate new pair of private key and public value.
-    uint8_t private_key[kKeySize];
+    std::array<uint8_t, kKeySize> private_key;
     Encryptor::PublicKeyId public_key_id;
-    uint8_t public_value[kKeySize];
+    std::array<uint8_t, kKeySize> public_value;
     test::GenerateEncryptionKeyPair(private_key, public_value);
     test::TestEvent<StatusOr<Encryptor::PublicKeyId>> prepare_key_pair;
-    decryptor_->RecordKeyPair(
-        std::string(reinterpret_cast<const char*>(private_key), kKeySize),
-        std::string(reinterpret_cast<const char*>(public_value), kKeySize),
-        prepare_key_pair.cb());
+    decryptor_->RecordKeyPair(Uint8ArrayToStringView(private_key),
+                              Uint8ArrayToStringView(public_value),
+                              prepare_key_pair.cb());
     auto prepare_key_result = prepare_key_pair.result();
     CHECK(prepare_key_result.has_value()) << prepare_key_result.error();
     public_key_id = prepare_key_result.value();
     // Prepare signed encryption key to be delivered to Storage.
     SignedEncryptionInfo signed_encryption_key;
     signed_encryption_key.set_public_asymmetric_key(
-        std::string(reinterpret_cast<const char*>(public_value), kKeySize));
+        Uint8ArrayToStringView(public_value));
     signed_encryption_key.set_public_key_id(public_key_id);
     // Sign public key.
-    uint8_t value_to_sign[sizeof(Encryptor::PublicKeyId) + kKeySize];
-    UNSAFE_TODO(
-        memcpy(value_to_sign, &public_key_id, sizeof(Encryptor::PublicKeyId)));
-    UNSAFE_TODO(memcpy(value_to_sign + sizeof(Encryptor::PublicKeyId),
-                       public_value, kKeySize));
-    uint8_t signature[kSignatureSize];
-    test::SignMessage(
-        signing_private_key_,
-        std::string_view(reinterpret_cast<const char*>(value_to_sign),
-                         sizeof(value_to_sign)),
-        signature);
-    signed_encryption_key.set_signature(
-        std::string(reinterpret_cast<const char*>(signature), kSignatureSize));
+    std::array<uint8_t, sizeof(Encryptor::PublicKeyId) + kKeySize>
+        value_to_sign;
+    auto writer = base::SpanWriter<uint8_t>(value_to_sign);
+    writer.Write(base::byte_span_from_ref(public_key_id));
+    writer.Write(public_value);
+    std::array<uint8_t, kSignatureSize> signature;
+    test::SignMessage(signing_private_key_,
+                      Uint8ArrayToStringView(value_to_sign), signature);
+    signed_encryption_key.set_signature(Uint8ArrayToStringView(signature));
     // Double check signature.
-    CHECK(VerifySignature(
-        signature_verification_public_key_,
-        std::string_view(reinterpret_cast<const char*>(value_to_sign),
-                         sizeof(value_to_sign)),
-        signature));
+    CHECK(VerifySignature(signature_verification_public_key_,
+                          Uint8ArrayToStringView(value_to_sign), signature));
     return signed_encryption_key;
   }
 
@@ -1013,9 +1014,8 @@
     // Generate signing key pair.
     test::GenerateSigningKeyPair(signing_private_key_,
                                  signature_verification_public_key_);
-    options_.set_signature_verification_public_key(std::string(
-        reinterpret_cast<const char*>(signature_verification_public_key_),
-        kKeySize));
+    options_.set_signature_verification_public_key(
+        Uint8ArrayToStringView(signature_verification_public_key_));
     // Create decryption module.
     auto decryptor_result = test::Decryptor::Create();
     ASSERT_TRUE(decryptor_result.has_value()) << decryptor_result.error();
@@ -1047,8 +1047,8 @@
 
   base::test::ScopedFeatureList scoped_feature_list_;
 
-  uint8_t signature_verification_public_key_[kKeySize];
-  uint8_t signing_private_key_[kSignKeySize];
+  std::array<uint8_t, kKeySize> signature_verification_public_key_;
+  std::array<uint8_t, kSignKeySize> signing_private_key_;
 
   base::ScopedTempDir location_;
   TestStorageOptions options_;
diff --git a/components/safe_browsing/content/browser/client_side_detection_host.cc b/components/safe_browsing/content/browser/client_side_detection_host.cc
index 6da9ab779..93e2317f 100644
--- a/components/safe_browsing/content/browser/client_side_detection_host.cc
+++ b/components/safe_browsing/content/browser/client_side_detection_host.cc
@@ -861,6 +861,12 @@
 
 void ClientSideDetectionHost::MaybeStartPreClassification(
     ClientSideDetectionType request_type) {
+  MaybeStartPreClassification(request_type, std::nullopt);
+}
+
+void ClientSideDetectionHost::MaybeStartPreClassification(
+    ClientSideDetectionType request_type,
+    std::optional<std::string> credit_card_form_event) {
   if (base::FeatureList::IsEnabled(kClientSideDetectionKillswitch)) {
     return;
   }
@@ -883,6 +889,12 @@
   current_url_ = rfh->GetLastCommittedURL();
   last_committed_url_map_[request_type] = current_url_;
   current_outermost_main_frame_id_ = rfh->GetGlobalId();
+  if (credit_card_form_event) {
+    DCHECK(request_type == ClientSideDetectionType::CREDIT_CARD_FORM);
+    last_credit_card_form_event_trigger_url_map_[credit_card_form_event
+                                                     .value()] = current_url_;
+  }
+
   // Check whether we can cassify the current URL for phishing.
   classification_request_ = std::make_unique<ShouldClassifyUrlRequest>(
       rfh->GetLastCommittedURL(), rfh->GetLastResponseHead(),
@@ -986,7 +998,9 @@
     NOTREACHED();
   }();
 
-  OnCreditCardFormEvent("OnFieldTypesDetermined", field_heuristic);
+  OnCreditCardFormEvent("OnFieldTypesDetermined",
+                        kCsdCreditCardFormPingOnDetection.Get(),
+                        field_heuristic);
 }
 
 // OnBeforeFocusOnFormField is an Autofill observer callback that triggers a CSD
@@ -1018,21 +1032,24 @@
     field_heuristic = credit_card_form::kAutofillLocal;
   }
 
-  OnCreditCardFormEvent("OnBeforeFocusOnFormField", field_heuristic);
+  OnCreditCardFormEvent("OnBeforeFocusOnFormField",
+                        kCsdCreditCardFormPingOnInteraction.Get(),
+                        field_heuristic);
 }
 
 void ClientSideDetectionHost::OnCreditCardFormEvent(
     std::string event_name,
+    bool allow_ping,
     credit_card_form::FieldDetectionHeuristic field_heuristic) {
   // Early exit if ESB is not enabled.
   if (!IsEnhancedProtectionEnabled(*delegate_->GetPrefs())) {
     return;
   }
 
-  // Early exit if preclassification has already been done for
-  // CREDIT_CARD_FORM and this URL.
+  // Early exit if preclassification has already been done for this
+  // event triggering CREDIT_CARD_FORM and this URL.
   if (HasDonePreclassificationCheckOnSameURL(
-          ClientSideDetectionType::CREDIT_CARD_FORM)) {
+          ClientSideDetectionType::CREDIT_CARD_FORM, event_name)) {
     return;
   }
 
@@ -1049,20 +1066,21 @@
     history_service_->GetVisibleVisitCountToHost(
         url,
         base::BindOnce(&ClientSideDetectionHost::OnCreditCardFormVisitCount,
-                       weak_factory_.GetWeakPtr(), event_name,
+                       weak_factory_.GetWeakPtr(), event_name, allow_ping,
                        base::TimeTicks::Now(), field_heuristic),
         &task_tracker_);
   } else {
     history::VisibleVisitCountToHostResult history_result =
         cached_history_result.value_or(
             history::VisibleVisitCountToHostResult{/*success=*/false});
-    OnCreditCardFormVisitCount(event_name, std::nullopt, field_heuristic,
-                               history_result);
+    OnCreditCardFormVisitCount(event_name, allow_ping, std::nullopt,
+                               field_heuristic, history_result);
   }
 }
 
 void ClientSideDetectionHost::OnCreditCardFormVisitCount(
     std::string event_name,
+    bool allow_ping,
     std::optional<base::TimeTicks> start_time,
     credit_card_form::FieldDetectionHeuristic field_heuristic,
     history::VisibleVisitCountToHostResult history_result) {
@@ -1082,12 +1100,19 @@
   }
   credit_card_form::LogEvent(event_name, site_visit, field_heuristic);
 
+  // After logging, only continue to pre-classification if sending a ping
+  // is allowed.
+  if (!allow_ping) {
+    return;
+  }
+
   // Early exit if it is known that the user has visited this site before.
   if (site_visit == credit_card_form::kRepeatSiteVisit) {
     return;
   }
 
-  MaybeStartPreClassification(ClientSideDetectionType::CREDIT_CARD_FORM);
+  MaybeStartPreClassification(ClientSideDetectionType::CREDIT_CARD_FORM,
+                              event_name);
 }
 
 void ClientSideDetectionHost::KeyboardLockRequested() {
@@ -1166,11 +1191,28 @@
 
 bool ClientSideDetectionHost::HasDonePreclassificationCheckOnSameURL(
     ClientSideDetectionType client_side_detection_type) {
+  return HasDonePreclassificationCheckOnSameURL(client_side_detection_type,
+                                                std::nullopt);
+}
+
+bool ClientSideDetectionHost::HasDonePreclassificationCheckOnSameURL(
+    ClientSideDetectionType client_side_detection_type,
+    std::optional<std::string> credit_card_form_event) {
   content::RenderFrameHost* rfh = web_contents()->GetPrimaryMainFrame();
   auto last_committed_url =
       last_committed_url_map_.find(client_side_detection_type);
-  return last_committed_url != last_committed_url_map_.end() &&
-         rfh->GetLastCommittedURL() == last_committed_url->second;
+  bool has_done_url = last_committed_url != last_committed_url_map_.end() &&
+                      rfh->GetLastCommittedURL() == last_committed_url->second;
+  if (client_side_detection_type == ClientSideDetectionType::CREDIT_CARD_FORM) {
+    DCHECK(credit_card_form_event);
+    auto last_event_url = last_credit_card_form_event_trigger_url_map_.find(
+        credit_card_form_event);
+    bool has_done_event =
+        last_event_url != last_credit_card_form_event_trigger_url_map_.end() &&
+        rfh->GetLastCommittedURL() == last_event_url->second;
+    return has_done_url && has_done_event;
+  }
+  return has_done_url;
 }
 
 void ClientSideDetectionHost::OnPhishingPreClassificationDone(
diff --git a/components/safe_browsing/content/browser/client_side_detection_host.h b/components/safe_browsing/content/browser/client_side_detection_host.h
index 71bc4a6a..50759a1b9 100644
--- a/components/safe_browsing/content/browser/client_side_detection_host.h
+++ b/components/safe_browsing/content/browser/client_side_detection_host.h
@@ -340,6 +340,9 @@
   // Helper function to create preclassification check once requirements are
   // met.
   void MaybeStartPreClassification(ClientSideDetectionType request_type);
+  void MaybeStartPreClassification(
+      ClientSideDetectionType request_type,
+      std::optional<std::string> credit_card_form_event);
 
   // Called when pre-classification checks are done for the phishing
   // classifiers. |request_type| is passed in to specify the process that
@@ -510,11 +513,15 @@
   // same as the last committed URL on the RenderFrameHost.
   bool HasDonePreclassificationCheckOnSameURL(
       ClientSideDetectionType client_side_detection_type);
+  bool HasDonePreclassificationCheckOnSameURL(
+      ClientSideDetectionType client_side_detection_type,
+      std::optional<std::string> credit_card_form_event);
 
   // OnCreditCardFormEvent is a common method called by Autofill credit card
   // form events that may trigger a CSD ping.
   void OnCreditCardFormEvent(
       std::string event_name,
+      bool allow_ping,
       credit_card_form::FieldDetectionHeuristic field_heuristic);
 
   // OnCreditCardFormVisitCount is a callback that is called when site
@@ -523,6 +530,7 @@
   // ping.
   void OnCreditCardFormVisitCount(
       std::string event_name,
+      bool allow_ping,
       std::optional<base::TimeTicks> start_time,
       credit_card_form::FieldDetectionHeuristic field_heuristic,
       history::VisibleVisitCountToHostResult history_result);
@@ -611,6 +619,11 @@
   // it can be triggered at a frequent basis per same URL.
   base::flat_map<ClientSideDetectionType, GURL> last_committed_url_map_;
 
+  // This map is used to track the last committed URL per credit card form
+  // event trigger that may trigger a CREDIT_CARD_FORM ping.
+  base::flat_map<std::string, GURL>
+      last_credit_card_form_event_trigger_url_map_;
+
   base::ScopedObservation<AsyncCheckTracker, AsyncCheckTracker::Observer>
       async_check_observation_{this};
 
diff --git a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_unittest.cc b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_unittest.cc
index 0d203df..cdfdc55 100644
--- a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_unittest.cc
+++ b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_unittest.cc
@@ -47,15 +47,8 @@
   TestingTailoredSecurityService(
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
       PrefService* prefs,
-      syncer::SyncService* sync_service)
-      // NOTE: Simply pass null object for IdentityManager and SyncService.
-      // TailoredSecurityService's only usage of this object is to fetch access
-      // tokens via RequestImpl, and TestingTailoredSecurityService deliberately
-      // replaces this flow with TestRequest.
-      : TailoredSecurityService(/*identity_manager=*/nullptr,
-                                /*sync_service=*/sync_service,
-                                prefs),
-        url_loader_factory_(url_loader_factory) {}
+      syncer::SyncService* sync_service);
+
   ~TestingTailoredSecurityService() override;
 
   std::unique_ptr<TailoredSecurityService::Request> CreateRequest(
@@ -136,8 +129,6 @@
   scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
 };
 
-TestingTailoredSecurityService::~TestingTailoredSecurityService() = default;
-
 // A testing request class that allows expected values to be filled in.
 class TestRequest : public TailoredSecurityService::Request {
  public:
@@ -200,6 +191,21 @@
   bool is_shut_down_ = false;
 };
 
+TestingTailoredSecurityService::TestingTailoredSecurityService(
+    scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
+    PrefService* prefs,
+    syncer::SyncService* sync_service)
+    // NOTE: Simply pass null object for IdentityManager and SyncService.
+    // TailoredSecurityService's only usage of this object is to fetch access
+    // tokens via RequestImpl, and TestingTailoredSecurityService deliberately
+    // replaces this flow with TestRequest.
+    : TailoredSecurityService(/*identity_manager=*/nullptr,
+                              /*sync_service=*/sync_service,
+                              prefs),
+      url_loader_factory_(url_loader_factory) {}
+
+TestingTailoredSecurityService::~TestingTailoredSecurityService() = default;
+
 // Overrides the production `CreateRequest` to support two modes of operation
 // for testing:
 //
diff --git a/components/safe_browsing/core/common/OWNERS b/components/safe_browsing/core/common/OWNERS
index 5e84e2a..3611e22 100644
--- a/components/safe_browsing/core/common/OWNERS
+++ b/components/safe_browsing/core/common/OWNERS
@@ -5,3 +5,4 @@
 
 per-file features.cc=file://components/safe_browsing/core/common/SAFE_BROWSING_FEATURE_OWNERS
 per-file features.h=file://components/safe_browsing/core/common/SAFE_BROWSING_FEATURE_OWNERS
+per-file proto/csd.proto=file://components/safe_browsing/core/common/SAFE_BROWSING_FEATURE_OWNERS
diff --git a/components/safe_browsing/core/common/features.cc b/components/safe_browsing/core/common/features.cc
index 88a1ad08..c35dc990 100644
--- a/components/safe_browsing/core/common/features.cc
+++ b/components/safe_browsing/core/common/features.cc
@@ -86,6 +86,12 @@
 const base::FeatureParam<int> kCsdCreditCardFormMaxUserVisit{
     &kClientSideDetectionCreditCardForm, "MaxUserVisit",
     /*default_value=*/1};
+const base::FeatureParam<bool> kCsdCreditCardFormPingOnDetection{
+    &kClientSideDetectionCreditCardForm, "PingOnDetection",
+    /*default_value=*/false};
+const base::FeatureParam<bool> kCsdCreditCardFormPingOnInteraction{
+    &kClientSideDetectionCreditCardForm, "PingOnInteraction",
+    /*default_value=*/false};
 
 BASE_FEATURE(kClientSideDetectionForcedLlamaRedirectChainKillswitch,
              base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/components/safe_browsing/core/common/features.h b/components/safe_browsing/core/common/features.h
index 1017f293..7ced7b8 100644
--- a/components/safe_browsing/core/common/features.h
+++ b/components/safe_browsing/core/common/features.h
@@ -73,6 +73,12 @@
 // If the user has visited more times than this max, then the CSD ping is
 // blocked.
 extern const base::FeatureParam<int> kCsdCreditCardFormMaxUserVisit;
+// Specifies whether to allow pre-classification to continue on a credit card
+// form detection event after logging telemetry.
+extern const base::FeatureParam<bool> kCsdCreditCardFormPingOnDetection;
+// Specifies whether to allow pre-classification to continue on a credit card
+// form interaction event after logging telemetry.
+extern const base::FeatureParam<bool> kCsdCreditCardFormPingOnInteraction;
 
 // Killswitch for Llama forced trigger info redirect chain check.
 BASE_DECLARE_FEATURE(kClientSideDetectionForcedLlamaRedirectChainKillswitch);
diff --git a/components/services/storage/dom_storage/dom_storage_database.h b/components/services/storage/dom_storage/dom_storage_database.h
index 443e9a1..5a90630 100644
--- a/components/services/storage/dom_storage/dom_storage_database.h
+++ b/components/services/storage/dom_storage/dom_storage_database.h
@@ -151,7 +151,6 @@
   virtual DbStatus RewriteDB() = 0;
 
   // Test-only functions.
-  virtual bool ShouldFailAllCommits() = 0;
   virtual void MakeAllCommitsFailForTesting() = 0;
   virtual void SetDestructionCallbackForTesting(base::OnceClosure callback) = 0;
 };
diff --git a/components/services/storage/dom_storage/leveldb/dom_storage_batch_operation_leveldb.cc b/components/services/storage/dom_storage/leveldb/dom_storage_batch_operation_leveldb.cc
index 3c0a5c6..b5832889 100644
--- a/components/services/storage/dom_storage/leveldb/dom_storage_batch_operation_leveldb.cc
+++ b/components/services/storage/dom_storage/leveldb/dom_storage_batch_operation_leveldb.cc
@@ -87,7 +87,7 @@
   if (!database_ || !db) {
     return DbStatus::IOError(kInvalidDatabaseMessage);
   }
-  if (database_->ShouldFailAllCommits()) {
+  if (database_->ShouldFailAllCommitsForTesting()) {
     return DbStatus::IOError("Simulated I/O Error");
   }
   return FromLevelDBStatus(db->Write(leveldb::WriteOptions(), &write_batch_));
diff --git a/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.cc b/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.cc
index 1b0c4bb..9a1b7b5 100644
--- a/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.cc
+++ b/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.cc
@@ -221,8 +221,8 @@
   return FromLevelDBStatus(status);
 }
 
-bool DomStorageDatabaseLevelDB::ShouldFailAllCommits() {
-  return fail_all_commits_;
+bool DomStorageDatabaseLevelDB::ShouldFailAllCommitsForTesting() {
+  return fail_all_commits_for_testing_;
 }
 
 void DomStorageDatabaseLevelDB::SetDestructionCallbackForTesting(
@@ -231,7 +231,7 @@
 }
 
 void DomStorageDatabaseLevelDB::MakeAllCommitsFailForTesting() {
-  fail_all_commits_ = true;
+  fail_all_commits_for_testing_ = true;
 }
 
 // This can only be called from `DomStorageBatchOperationLevelDB`.
diff --git a/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.h b/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.h
index 3fe1d844..b115e40 100644
--- a/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.h
+++ b/components/services/storage/dom_storage/leveldb/dom_storage_database_leveldb.h
@@ -66,7 +66,7 @@
 
   DbStatus RewriteDB();
 
-  bool ShouldFailAllCommits();
+  bool ShouldFailAllCommitsForTesting();
   void SetDestructionCallbackForTesting(base::OnceClosure callback);
   void MakeAllCommitsFailForTesting();
 
@@ -127,9 +127,9 @@
       memory_dump_id_;
   std::unique_ptr<leveldb::DB> db_;
 
-  // If true, all calls to `Commit()` fail with an IOError. This should only be
-  // set in tests to simulate disk failures.
-  bool fail_all_commits_ = false;
+  // If true, all calls to `DomStorageBatchOperationLevelDB::Commit()` fail with
+  // an IOError. This should only be set in tests to simulate disk failures.
+  bool fail_all_commits_for_testing_ = false;
 
   // Callback to run on destruction in tests.
   base::OnceClosure destruction_callback_;
diff --git a/components/services/storage/dom_storage/leveldb/local_storage_leveldb.cc b/components/services/storage/dom_storage/leveldb/local_storage_leveldb.cc
index 752b8f8..179f921 100644
--- a/components/services/storage/dom_storage/leveldb/local_storage_leveldb.cc
+++ b/components/services/storage/dom_storage/leveldb/local_storage_leveldb.cc
@@ -259,10 +259,6 @@
   return leveldb_->RewriteDB();
 }
 
-bool LocalStorageLevelDB::ShouldFailAllCommits() {
-  return leveldb_->ShouldFailAllCommits();
-}
-
 void LocalStorageLevelDB::MakeAllCommitsFailForTesting() {
   leveldb_->MakeAllCommitsFailForTesting();
 }
diff --git a/components/services/storage/dom_storage/leveldb/local_storage_leveldb.h b/components/services/storage/dom_storage/leveldb/local_storage_leveldb.h
index 7efa401..039ea95a 100644
--- a/components/services/storage/dom_storage/leveldb/local_storage_leveldb.h
+++ b/components/services/storage/dom_storage/leveldb/local_storage_leveldb.h
@@ -133,7 +133,6 @@
   DbStatus RewriteDB() override;
 
   // Test-only functions.
-  bool ShouldFailAllCommits() override;
   void MakeAllCommitsFailForTesting() override;
   void SetDestructionCallbackForTesting(base::OnceClosure callback) override;
 
diff --git a/components/services/storage/dom_storage/leveldb/session_storage_leveldb.cc b/components/services/storage/dom_storage/leveldb/session_storage_leveldb.cc
index 09cdb9f..78388dd 100644
--- a/components/services/storage/dom_storage/leveldb/session_storage_leveldb.cc
+++ b/components/services/storage/dom_storage/leveldb/session_storage_leveldb.cc
@@ -133,10 +133,6 @@
   return leveldb_->RewriteDB();
 }
 
-bool SessionStorageLevelDB::ShouldFailAllCommits() {
-  return leveldb_->ShouldFailAllCommits();
-}
-
 void SessionStorageLevelDB::MakeAllCommitsFailForTesting() {
   leveldb_->MakeAllCommitsFailForTesting();
 }
diff --git a/components/services/storage/dom_storage/leveldb/session_storage_leveldb.h b/components/services/storage/dom_storage/leveldb/session_storage_leveldb.h
index 09416e2..54ffbc17 100644
--- a/components/services/storage/dom_storage/leveldb/session_storage_leveldb.h
+++ b/components/services/storage/dom_storage/leveldb/session_storage_leveldb.h
@@ -87,7 +87,6 @@
   DbStatus RewriteDB() override;
 
   // Test-only functions.
-  bool ShouldFailAllCommits() override;
   void MakeAllCommitsFailForTesting() override;
   void SetDestructionCallbackForTesting(base::OnceClosure callback) override;
 
diff --git a/components/signin/public/android/BUILD.gn b/components/signin/public/android/BUILD.gn
index d6b0dea..2e7a96b 100644
--- a/components/signin/public/android/BUILD.gn
+++ b/components/signin/public/android/BUILD.gn
@@ -13,6 +13,7 @@
     "//google_apis/gaia/android:java",
     "//net/android:net_java",
     "//third_party/android_deps:chromium_play_services_availability_java",
+    "//third_party/android_deps:com_google_errorprone_error_prone_annotations_java",
     "//third_party/androidx:androidx_annotation_annotation_java",
     "//third_party/jni_zero:jni_zero_java",
   ]
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountInfo.java b/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountInfo.java
index 7e12097..c05a53e5d 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountInfo.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountInfo.java
@@ -7,6 +7,8 @@
 import android.graphics.Bitmap;
 import android.text.TextUtils;
 
+import com.google.errorprone.annotations.DoNotMock;
+
 import org.jni_zero.CalledByNative;
 import org.jni_zero.JniType;
 
@@ -23,9 +25,10 @@
 /**
  * Stores all the information known about an account.
  *
- * This class has a native counterpart called AccountInfo.
+ * <p>This class has a native counterpart called AccountInfo.
  */
 @NullMarked
+@DoNotMock("Use TestAccounts or create a real instance.")
 public class AccountInfo extends CoreAccountInfo {
     /** Used to instantiate `AccountInfo`. */
     public static class Builder {
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java b/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java
index f35a9628..ed40669 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java
@@ -6,6 +6,8 @@
 
 import android.accounts.Account;
 
+import com.google.errorprone.annotations.DoNotMock;
+
 import org.jni_zero.CalledByNative;
 import org.jni_zero.JniType;
 
@@ -24,6 +26,7 @@
  * <p>This class has a native counterpart called CoreAccountInfo.
  */
 @NullMarked
+@DoNotMock("Use TestAccounts or create a real instance.")
 public class CoreAccountInfo {
     private final CoreAccountId mId;
     private final String mEmail;
diff --git a/components/signin/public/base/signin_prefs.cc b/components/signin/public/base/signin_prefs.cc
index f06a8f4..a827f1a 100644
--- a/components/signin/public/base/signin_prefs.cc
+++ b/components/signin/public/base/signin_prefs.cc
@@ -49,6 +49,11 @@
 constexpr char kChromeSigninInterceptionRepromptCount[] =
     "ChromeSigninInterceptionRepromptCount";
 
+// Same as kChromeSigninInterceptionRepromptCount, different value to be used in
+// SigninPromoLimitsExperiment.
+constexpr char kChromeSigninInterceptionRepromptCountForLimitsExperiment[] =
+    "ChromeSigninInterceptionRepromptCountForLimitsExperiment";
+
 // Pref used to store the number of dismisses of the Chrome Signin Bubble. It
 // is tied to an account, stored as the content of a dictionary mapped by the
 // gaia id of the account.
@@ -250,16 +255,24 @@
 
 int SigninPrefs::IncrementChromeSigninBubbleRepromptCount(
     const GaiaId& gaia_id) {
-  return IncrementIntPrefForAccount(gaia_id,
-                                    kChromeSigninInterceptionRepromptCount);
+  return IncrementIntPrefForAccount(
+      gaia_id,
+      base::FeatureList::IsEnabled(switches::kSigninPromoLimitsExperiment)
+          ? kChromeSigninInterceptionRepromptCountForLimitsExperiment
+          : kChromeSigninInterceptionRepromptCount);
 }
 
 int SigninPrefs::GetChromeSigninBubbleRepromptCount(
     const GaiaId& gaia_id) const {
-  return GetIntPrefForAccount(gaia_id, kChromeSigninInterceptionRepromptCount);
+  return GetIntPrefForAccount(
+      gaia_id,
+      base::FeatureList::IsEnabled(switches::kSigninPromoLimitsExperiment)
+          ? kChromeSigninInterceptionRepromptCountForLimitsExperiment
+          : kChromeSigninInterceptionRepromptCount);
 }
 
 void SigninPrefs::ClearChromeSigninBubbleRepromptCount(const GaiaId& gaia_id) {
+  ClearPref(gaia_id, kChromeSigninInterceptionRepromptCountForLimitsExperiment);
   ClearPref(gaia_id, kChromeSigninInterceptionRepromptCount);
 }
 
diff --git a/components/signin/public/base/signin_switches.cc b/components/signin/public/base/signin_switches.cc
index d17b0f3..d57f0c8c 100644
--- a/components/signin/public/base/signin_switches.cc
+++ b/components/signin/public/base/signin_switches.cc
@@ -350,6 +350,9 @@
 BASE_FEATURE(kProfileCreationDeclineSigninCTAExperiment,
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+BASE_FEATURE(kProfileCreationFrictionReductionExperiment,
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 BASE_FEATURE(kProfilePickerTextVariations, base::FEATURE_DISABLED_BY_DEFAULT);
 constexpr base::FeatureParam<ProfilePickerVariation>::Option
     kProfilePickerVariations[] = {
@@ -464,6 +467,24 @@
              base::FEATURE_DISABLED_BY_DEFAULT);
 #endif  // BUILDFLAG(ENABLE_DICE_SUPPORT)
 
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
+constexpr base::FeatureParam<ProfileCreationFrictionReductionVariation>::Option
+    kProfileCreationFrictionReductionVariations[] = {
+        {ProfileCreationFrictionReductionVariation::kRemoveSigninStep,
+         "remove-signin-step"},
+        {ProfileCreationFrictionReductionVariation::kPrefillNameRequirement,
+         "prefill-name-requirement"},
+        {ProfileCreationFrictionReductionVariation::kSkipCustomizeProfileStep,
+         "skip-customize-profile-step"},
+};
+constexpr base::FeatureParam<ProfileCreationFrictionReductionVariation>
+    kProfileCreationFrictionReductionVariation{
+        &kProfileCreationFrictionReductionExperiment,
+        "profile-creation-friction-reduction-variation",
+        ProfileCreationFrictionReductionVariation::kRemoveSigninStep,
+        &kProfileCreationFrictionReductionVariations};
+#endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
+
 // keep-sorted end
 
 bool IsExtensionsExplicitBrowserSigninEnabled() {
diff --git a/components/signin/public/base/signin_switches.h b/components/signin/public/base/signin_switches.h
index 0fa9b4ab..92e07fe4 100644
--- a/components/signin/public/base/signin_switches.h
+++ b/components/signin/public/base/signin_switches.h
@@ -295,6 +295,11 @@
 COMPONENT_EXPORT(SIGNIN_SWITCHES)
 BASE_DECLARE_FEATURE(kProfileCreationDeclineSigninCTAExperiment);
 
+// Experimenting with removing steps in the profile creation flow to reduce
+// friction.
+COMPONENT_EXPORT(SIGNIN_SWITCHES)
+BASE_DECLARE_FEATURE(kProfileCreationFrictionReductionExperiment);
+
 // Enables variations of the profile picker text.
 COMPONENT_EXPORT(SIGNIN_SWITCHES)
 BASE_DECLARE_FEATURE(kProfilePickerTextVariations);
@@ -410,6 +415,18 @@
     kSeamlessSigninStringType;
 #endif  // BUILDFLAG(IS_ANDROID)
 
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
+// Experimenting with variations of flow change.
+enum class ProfileCreationFrictionReductionVariation {
+  kRemoveSigninStep = 0,
+  kPrefillNameRequirement = 1,
+  kSkipCustomizeProfileStep = 2,
+};
+COMPONENT_EXPORT(SIGNIN_SWITCHES)
+extern const base::FeatureParam<ProfileCreationFrictionReductionVariation>
+    kProfileCreationFrictionReductionVariation;
+#endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
+
 // keep-sorted end
 
 // Helper functions that are no longer attached to any features.
diff --git a/components/sync/base/user_selectable_type.cc b/components/sync/base/user_selectable_type.cc
index e7cd6eb..ac1a66c 100644
--- a/components/sync/base/user_selectable_type.cc
+++ b/components/sync/base/user_selectable_type.cc
@@ -78,11 +78,6 @@
               kSyncSupportAlwaysSyncingPriorityPreferences)) {
         types.Put(PRIORITY_PREFERENCES);
       }
-      if ((!skip_feature_checks_if_early || base::FeatureList::GetInstance()) &&
-          base::FeatureList::IsEnabled(
-              kSpellcheckSeparateLocalAndAccountDictionaries)) {
-        types.Remove(DICTIONARY);
-      }
       return {kPreferencesTypeName, PREFERENCES, types};
     }
     case UserSelectableType::kPasswords:
@@ -97,17 +92,10 @@
               {AUTOFILL, AUTOFILL_PROFILE, CONTACT_INFO}};
     case UserSelectableType::kThemes:
       return {kThemesTypeName, THEMES, {THEMES}};
-    case UserSelectableType::kHistory: {
-      DataTypeSet types = {HISTORY, HISTORY_DELETE_DIRECTIVES, USER_EVENTS};
-      // With `kSpellcheckSeparateLocalAndAccountDictionaries` enabled,
-      // `DICTIONARY` is controlled by the History opt-in.
-      if ((!skip_feature_checks_if_early || base::FeatureList::GetInstance()) &&
-          base::FeatureList::IsEnabled(
-              kSpellcheckSeparateLocalAndAccountDictionaries)) {
-        types.Put(DICTIONARY);
-      }
-      return {kHistoryTypeName, HISTORY, types};
-    }
+    case UserSelectableType::kHistory:
+      return {kHistoryTypeName,
+              HISTORY,
+              {HISTORY, HISTORY_DELETE_DIRECTIVES, USER_EVENTS}};
     case UserSelectableType::kExtensions:
       return {
           kExtensionsTypeName, EXTENSIONS, {EXTENSIONS, EXTENSION_SETTINGS}};
diff --git a/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json b/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json
index 8e88645..b7a90dc 100644
--- a/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json
+++ b/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json
@@ -1733,11 +1733,9 @@
                "resources": [ 26 ],
                "secure_output_only": false,
                "shared_quad_state_index": 0,
-               "uv_bottom_right": {
-                  "x": 1.0,
-                  "y": 1.0
-               },
-               "uv_top_left": {
+               "tex_coord_rect": {
+                  "height": 1.0,
+                  "width": 1.0,
                   "x": 0.0,
                   "y": 0.0
                },
@@ -1769,11 +1767,9 @@
                "resources": [ 25 ],
                "secure_output_only": false,
                "shared_quad_state_index": 0,
-               "uv_bottom_right": {
-                  "x": 1.0,
-                  "y": 1.0
-               },
-               "uv_top_left": {
+               "tex_coord_rect": {
+                  "height": 1.0,
+                  "width": 1.0,
                   "x": 0.0,
                   "y": 0.0
                },
@@ -2227,11 +2223,9 @@
                "resources": [ 35 ],
                "secure_output_only": false,
                "shared_quad_state_index": 1,
-               "uv_bottom_right": {
-                  "x": 1.0,
-                  "y": 1.0
-               },
-               "uv_top_left": {
+               "tex_coord_rect": {
+                  "height": 1.0,
+                  "width": 1.0,
                   "x": 0.0,
                   "y": 0.0
                },
@@ -2263,11 +2257,9 @@
                "resources": [ 34 ],
                "secure_output_only": false,
                "shared_quad_state_index": 1,
-               "uv_bottom_right": {
-                  "x": 1.0,
-                  "y": 1.0
-               },
-               "uv_top_left": {
+               "tex_coord_rect": {
+                  "height": 1.0,
+                  "width": 1.0,
                   "x": 0.0,
                   "y": 0.0
                },
@@ -2299,11 +2291,9 @@
                "resources": [ 33 ],
                "secure_output_only": false,
                "shared_quad_state_index": 2,
-               "uv_bottom_right": {
-                  "x": 1.0,
-                  "y": 1.0
-               },
-               "uv_top_left": {
+               "tex_coord_rect": {
+                  "height": 1.0,
+                  "width": 1.0,
                   "x": 0.0,
                   "y": 0.0
                },
@@ -2335,11 +2325,9 @@
                "resources": [ 32 ],
                "secure_output_only": false,
                "shared_quad_state_index": 2,
-               "uv_bottom_right": {
-                  "x": 1.0,
-                  "y": 1.0
-               },
-               "uv_top_left": {
+               "tex_coord_rect": {
+                  "height": 1.0,
+                  "width": 1.0,
                   "x": 0.0,
                   "y": 0.0
                },
@@ -4298,11 +4286,9 @@
                "resources": [ 54 ],
                "secure_output_only": false,
                "shared_quad_state_index": 0,
-               "uv_bottom_right": {
-                  "x": 1.0,
-                  "y": 1.0
-               },
-               "uv_top_left": {
+               "tex_coord_rect": {
+                  "height": 1.0,
+                  "width": 1.0,
                   "x": 0.0,
                   "y": 0.0
                },
diff --git a/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json b/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json
index bfb5bdd..a3b5a87a 100644
--- a/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json
+++ b/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json
@@ -1362,11 +1362,9 @@
          "resources": [ 566 ],
          "secure_output_only": false,
          "shared_quad_state_index": 2,
-         "uv_bottom_right": {
-            "x": 1.0,
-            "y": 1.0
-         },
-         "uv_top_left": {
+         "tex_coord_rect": {
+            "height": 1.0,
+            "width": 1.0,
             "x": 0.0,
             "y": 0.0
          },
@@ -1398,11 +1396,9 @@
          "resources": [ 567 ],
          "secure_output_only": false,
          "shared_quad_state_index": 2,
-         "uv_bottom_right": {
-            "x": 1.0,
-            "y": 1.0
-         },
-         "uv_top_left": {
+         "tex_coord_rect": {
+            "height": 1.0,
+            "width": 1.0,
             "x": 0.0,
             "y": 0.0
          },
diff --git a/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc b/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc
index f3c045e..6b1d36d2 100644
--- a/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc
+++ b/components/url_formatter/spoof_checks/top_domains/make_top_domain_list_variables.cc
@@ -31,6 +31,7 @@
 #include "base/files/file_util.h"
 #include "base/i18n/icu_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/path_service.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
diff --git a/components/url_formatter/spoof_checks/top_domains/top_domain_generator.cc b/components/url_formatter/spoof_checks/top_domains/top_domain_generator.cc
index f0f45d0..58e7c49 100644
--- a/components/url_formatter/spoof_checks/top_domains/top_domain_generator.cc
+++ b/components/url_formatter/spoof_checks/top_domains/top_domain_generator.cc
@@ -19,6 +19,7 @@
 #include "base/files/file_util.h"
 #include "base/i18n/icu_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc
index a3d4219..230ac39e6c1 100644
--- a/components/viz/common/features.cc
+++ b/components/viz/common/features.cc
@@ -102,7 +102,7 @@
 // can be split into during occlusion culling.
 BASE_FEATURE(kDrawQuadSplitLimit, base::FEATURE_DISABLED_BY_DEFAULT);
 
-BASE_FEATURE(kEnableBackdropFiltersCullingOptimization,
+BASE_FEATURE(kEnableRenderPassDrawQuadCullingOptimization,
              base::FEATURE_ENABLED_BY_DEFAULT);
 
 constexpr base::FeatureParam<DelegatedCompositingMode>::Option
@@ -402,17 +402,17 @@
                     kMaxDrawQuadSplitLimit);
 }
 
+bool IsRenderPassDrawQuadCullingOptimizationEnabled() {
+  static bool is_enabled = base::FeatureList::IsEnabled(
+      kEnableRenderPassDrawQuadCullingOptimization);
+  return is_enabled;
+}
+
 bool IsBackForwardTransitionsSameDocSharedImageEnabled() {
   return base::FeatureList::IsEnabled(
       kBackForwardTransitionsSameDocSharedImage);
 }
 
-bool IsBackdropFiltersCullingOptimizationEnabled() {
-  static bool is_enabled =
-      base::FeatureList::IsEnabled(kEnableBackdropFiltersCullingOptimization);
-  return is_enabled;
-}
-
 bool IsDelegatedCompositingEnabled() {
   return base::FeatureList::IsEnabled(kDelegatedCompositing);
 }
diff --git a/components/viz/common/features.h b/components/viz/common/features.h
index 484cf73..b47b1b8 100644
--- a/components/viz/common/features.h
+++ b/components/viz/common/features.h
@@ -38,7 +38,7 @@
 VIZ_COMMON_EXPORT BASE_DECLARE_FEATURE(kDrawQuadSplitLimit);
 
 VIZ_COMMON_EXPORT BASE_DECLARE_FEATURE(
-    kEnableBackdropFiltersCullingOptimization);
+    kEnableRenderPassDrawQuadCullingOptimization);
 
 enum class DelegatedCompositingMode {
   // Enable delegated compositing.
@@ -156,8 +156,8 @@
 VIZ_COMMON_EXPORT BASE_DECLARE_FEATURE(kDisplaySchedulerAsClient);
 
 VIZ_COMMON_EXPORT int DrawQuadSplitLimit();
+VIZ_COMMON_EXPORT bool IsRenderPassDrawQuadCullingOptimizationEnabled();
 VIZ_COMMON_EXPORT bool IsBackForwardTransitionsSameDocSharedImageEnabled();
-VIZ_COMMON_EXPORT bool IsBackdropFiltersCullingOptimizationEnabled();
 VIZ_COMMON_EXPORT bool IsDelegatedCompositingEnabled();
 VIZ_COMMON_EXPORT bool IsVizDirectCompositorThreadIpcNonRootEnabled();
 VIZ_COMMON_EXPORT bool IsVizDirectCompositorThreadIpcFrameSinkManagerEnabled();
diff --git a/components/viz/common/quads/draw_quad_unittest.cc b/components/viz/common/quads/draw_quad_unittest.cc
index 03afcb0..ec2dc06 100644
--- a/components/viz/common/quads/draw_quad_unittest.cc
+++ b/components/viz/common/quads/draw_quad_unittest.cc
@@ -32,6 +32,9 @@
 #include "components/viz/common/resources/resource_id.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/rect_f.h"
+#include "ui/gfx/geometry/size.h"
 #include "ui/gfx/geometry/transform.h"
 #include "ui/gfx/hdr_metadata.h"
 #include "ui/gfx/video_types.h"
@@ -292,8 +295,8 @@
   gfx::Rect visible_rect(40, 50, 30, 20);
   bool blending = true;
   ResourceId resource_id(82);
-  gfx::PointF uv_top_left(0.5f, 224.f);
-  gfx::PointF uv_bottom_right(51.5f, 260.f);
+  const gfx::RectF tex_coord_rect =
+      BoundingRect(gfx::PointF(0.5f, 224.f), gfx::PointF(51.5f, 260.f));
   bool nearest_neighbor = true;
   bool secure_output_only = true;
   gfx::ProtectedVideoType protected_video_type =
@@ -301,25 +304,24 @@
   CREATE_SHARED_STATE();
 
   CREATE_QUAD_NEW(TextureDrawQuad, visible_rect, blending, resource_id,
-                  uv_top_left, uv_bottom_right, SkColors::kTransparent,
-                  nearest_neighbor, secure_output_only, protected_video_type);
+                  tex_coord_rect.origin(), tex_coord_rect.bottom_right(),
+                  SkColors::kTransparent, nearest_neighbor, secure_output_only,
+                  protected_video_type);
   EXPECT_EQ(DrawQuad::Material::kTextureContent, copy_quad->material);
   EXPECT_EQ(visible_rect, copy_quad->visible_rect);
   EXPECT_EQ(blending, copy_quad->needs_blending);
   EXPECT_EQ(resource_id, copy_quad->resource_id);
-  EXPECT_EQ(uv_top_left, copy_quad->uv_top_left);
-  EXPECT_EQ(uv_bottom_right, copy_quad->uv_bottom_right);
+  EXPECT_EQ(tex_coord_rect, copy_quad->GetNormalizedTexCoords(gfx::Size(1, 1)));
   EXPECT_EQ(nearest_neighbor, copy_quad->nearest_neighbor);
   EXPECT_EQ(secure_output_only, copy_quad->secure_output_only);
   EXPECT_EQ(protected_video_type, copy_quad->protected_video_type);
 
-  CREATE_QUAD_ALL(TextureDrawQuad, resource_id, uv_top_left, uv_bottom_right,
-                  SkColors::kTransparent, nearest_neighbor, secure_output_only,
-                  protected_video_type);
+  CREATE_QUAD_ALL(TextureDrawQuad, resource_id, tex_coord_rect.origin(),
+                  tex_coord_rect.bottom_right(), SkColors::kTransparent,
+                  nearest_neighbor, secure_output_only, protected_video_type);
   EXPECT_EQ(DrawQuad::Material::kTextureContent, copy_quad->material);
   EXPECT_EQ(resource_id, copy_quad->resource_id);
-  EXPECT_EQ(uv_top_left, copy_quad->uv_top_left);
-  EXPECT_EQ(uv_bottom_right, copy_quad->uv_bottom_right);
+  EXPECT_EQ(tex_coord_rect, copy_quad->GetNormalizedTexCoords(gfx::Size(1, 1)));
   EXPECT_EQ(nearest_neighbor, copy_quad->nearest_neighbor);
   EXPECT_EQ(secure_output_only, copy_quad->secure_output_only);
   EXPECT_EQ(protected_video_type, copy_quad->protected_video_type);
diff --git a/components/viz/common/quads/render_pass_io.cc b/components/viz/common/quads/render_pass_io.cc
index 90f37a63..f1a3e272 100644
--- a/components/viz/common/quads/render_pass_io.cc
+++ b/components/viz/common/quads/render_pass_io.cc
@@ -1242,6 +1242,11 @@
   dict->Set("allow_merge", draw_quad->allow_merge);
 }
 
+}  // namespace
+
+// TODO(crbug.com/451876192): Move this function back into an anonymous
+// namespace after the refactor to to make TextureDrawQuad use unnormalized
+// coordinates is complete
 void TextureDrawQuadToDict(const TextureDrawQuad* draw_quad,
                            base::Value::Dict* dict) {
   DCHECK(draw_quad);
@@ -1249,8 +1254,7 @@
   // Set premultiplied_alpha to not break backwards-compatibility with unit test
   // data.
   dict->Set("premultiplied_alpha", true);
-  dict->Set("uv_top_left", PointFToDict(draw_quad->uv_top_left));
-  dict->Set("uv_bottom_right", PointFToDict(draw_quad->uv_bottom_right));
+  dict->Set("tex_coord_rect", RectFToDict(draw_quad->tex_coord_rect_));
   dict->Set("background_color", SkColor4fToDict(draw_quad->background_color));
   // TODO(crbug.com/40942150): Update
   // "components/test/data/viz/render_pass_data/" to reflect the deprecation of
@@ -1266,6 +1270,8 @@
   }
 }
 
+namespace {
+
 void TileDrawQuadToDict(const TileDrawQuad* draw_quad,
                         base::Value::Dict* dict) {
   DCHECK(draw_quad);
@@ -1434,8 +1440,7 @@
                              TextureDrawQuad* draw_quad) {
   DCHECK(draw_quad);
 
-  const base::Value::Dict* uv_top_left = dict.FindDict("uv_top_left");
-  const base::Value::Dict* uv_bottom_right = dict.FindDict("uv_bottom_right");
+  const base::Value::Dict* tex_coord_rect = dict.FindDict("tex_coord_rect");
   // TODO(crbug.com/40942150): Update
   // "components/test/data/viz/render_pass_data/" to reflect the deprecation of
   // vertex opacity.
@@ -1446,18 +1451,17 @@
   const std::string* protected_video_type =
       dict.FindString("protected_video_type");
 
-  if (!uv_top_left || !uv_bottom_right || !vertex_opacity ||
-      !nearest_neighbor || !secure_output_only || !protected_video_type) {
+  if (!tex_coord_rect || !vertex_opacity || !nearest_neighbor ||
+      !secure_output_only || !protected_video_type) {
     return false;
   }
   int protected_video_type_index =
       StringToProtectedVideoType(*protected_video_type);
   if (protected_video_type_index < 0)
     return false;
-  gfx::PointF t_uv_top_left, t_uv_bottom_right;
+  gfx::RectF t_tex_coord_rect;
   SkColor4f t_background_color;
-  if (!PointFFromDict(*uv_top_left, &t_uv_top_left) ||
-      !PointFFromDict(*uv_bottom_right, &t_uv_bottom_right) ||
+  if (!RectFFromDict(*tex_coord_rect, &t_tex_coord_rect) ||
       !ColorFromDict(dict, "background_color", &t_background_color)) {
     return false;
   }
@@ -1465,8 +1469,9 @@
   ResourceId resource_id = common.resource_id;
   draw_quad->SetAll(
       common.shared_quad_state, common.rect, common.visible_rect,
-      common.needs_blending, resource_id, t_uv_top_left, t_uv_bottom_right,
-      t_background_color, nearest_neighbor.value(), secure_output_only.value(),
+      common.needs_blending, resource_id, t_tex_coord_rect.origin(),
+      t_tex_coord_rect.bottom_right(), t_background_color,
+      nearest_neighbor.value(), secure_output_only.value(),
       static_cast<gfx::ProtectedVideoType>(protected_video_type_index));
 
   gfx::Rect t_damage_rect;
diff --git a/components/viz/common/quads/texture_draw_quad.cc b/components/viz/common/quads/texture_draw_quad.cc
index d34e1a3..9a16f504 100644
--- a/components/viz/common/quads/texture_draw_quad.cc
+++ b/components/viz/common/quads/texture_draw_quad.cc
@@ -47,8 +47,7 @@
   DrawQuad::SetAll(shared_quad_state, DrawQuad::Material::kTextureContent, rect,
                    visible_rect, needs_blending);
   resource_id = resource;
-  uv_top_left = top_left;
-  uv_bottom_right = bottom_right;
+  tex_coord_rect_ = gfx::BoundingRect(top_left, bottom_right);
   background_color = background;
   nearest_neighbor = nearest;
   secure_output_only = secure_output;
@@ -70,8 +69,7 @@
   DrawQuad::SetAll(shared_quad_state, DrawQuad::Material::kTextureContent, rect,
                    visible_rect, needs_blending);
   resource_id = resource;
-  uv_top_left = top_left;
-  uv_bottom_right = bottom_right;
+  tex_coord_rect_ = gfx::BoundingRect(top_left, bottom_right);
   background_color = background;
   nearest_neighbor = nearest;
   secure_output_only = secure_output;
@@ -84,8 +82,7 @@
 }
 
 void TextureDrawQuad::ExtendValue(base::trace_event::TracedValue* value) const {
-  cc::MathUtil::AddToTracedValue("uv_top_left", uv_top_left, value);
-  cc::MathUtil::AddToTracedValue("uv_bottom_right", uv_bottom_right, value);
+  cc::MathUtil::AddToTracedValue("tex_coord_rect", tex_coord_rect_, value);
   value->SetString("background_color",
                    color_utils::SkColor4fToRgbaString(background_color));
   value->SetString("dynamic_range_limit", dynamic_range_limit.ToString());
diff --git a/components/viz/common/quads/texture_draw_quad.h b/components/viz/common/quads/texture_draw_quad.h
index 135fdb7..aa538d86 100644
--- a/components/viz/common/quads/texture_draw_quad.h
+++ b/components/viz/common/quads/texture_draw_quad.h
@@ -8,6 +8,7 @@
 #include <array>
 #include <optional>
 
+#include "base/values.h"
 #include "cc/paint/paint_flags.h"
 #include "components/viz/common/quads/draw_quad.h"
 #include "components/viz/common/resources/resource_id.h"
@@ -16,7 +17,15 @@
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/video_types.h"
 
+namespace mojo {
+template <typename DataViewType, typename T>
+struct StructTraits;
+}
+
 namespace viz {
+namespace mojom {
+class TextureQuadStateDataView;
+}
 
 // The priority for a quads to require being promoted to overlay.
 enum class OverlayPriority { kLow, kRegular, kRequired };
@@ -54,8 +63,35 @@
               bool secure_output,
               gfx::ProtectedVideoType video_type);
 
-  gfx::PointF uv_top_left;
-  gfx::PointF uv_bottom_right;
+  // Returns the texture coordinates in the range [0, 1].
+  gfx::RectF GetNormalizedTexCoords(const gfx::Size& resource_size) const {
+    // TODO(crbug.com/451876192): This parameter is currently unused because
+    // tex_coord_rect_ is always normalized. It is included here to prepare for
+    // the next CL where tex_coord_rect_ may be unnormalized, requiring
+    // resource_size to perform the normalization.
+    return tex_coord_rect_;
+  }
+
+  // Returns the texture coordinates in the range [0, resource_size].
+  gfx::RectF GetUnnormalizedTexCoords(const gfx::Size& resource_size) const {
+    // tex_coord_rect_ is currently always normalized, so we must scale it.
+    // In the future, if the internal storage becomes unnormalized, this will
+    // simply return tex_coord_rect_ directly.
+    return gfx::ScaleRect(tex_coord_rect_,
+                          static_cast<float>(resource_size.width()),
+                          static_cast<float>(resource_size.height()));
+  }
+
+  // Sets the texture coordinates in the range [0, 1].
+  void SetNormalizedTexCoordsForTesting(const gfx::RectF& normalized_rect,
+                                        const gfx::Size& resource_size) {
+    // TODO(crbug.com/451876192): This parameter is unused because the internal
+    // storage is currently normalized. It is included to establish the API
+    // for the future CL where we will need to scale the input `normalized_rect`
+    // by `resource_size` to store it as unnormalized coordinates.
+    tex_coord_rect_ = normalized_rect;
+  }
+
   SkColor4f background_color = SkColors::kTransparent;
   cc::PaintFlags::DynamicRangeLimitMixture dynamic_range_limit;
   bool nearest_neighbor : 1;
@@ -129,6 +165,14 @@
   static const TextureDrawQuad* MaterialCast(const DrawQuad*);
 
  private:
+  // TODO(crbug.com/451876192): Remove friend classes after the refactor
+  // to make TextureDrawQuad use unnormalized coordinates is complete
+  friend struct mojo::StructTraits<mojom::TextureQuadStateDataView, DrawQuad>;
+  friend void TextureDrawQuadToDict(const TextureDrawQuad* draw_quad,
+                                    base::Value::Dict* dict);
+
+  gfx::RectF tex_coord_rect_;
+
   void ExtendValue(base::trace_event::TracedValue* value) const override;
 };
 
diff --git a/components/viz/service/display/ca_layer_overlay.cc b/components/viz/service/display/ca_layer_overlay.cc
index 6efbdbda..0bb35621 100644
--- a/components/viz/service/display/ca_layer_overlay.cc
+++ b/components/viz/service/display/ca_layer_overlay.cc
@@ -162,8 +162,8 @@
     ca_layer_overlay->transform = transform;
   }
   ca_layer_overlay->resource_id = resource_id;
-  ca_layer_overlay->uv_rect =
-      BoundingRect(quad->uv_top_left, quad->uv_bottom_right);
+  ca_layer_overlay->uv_rect = quad->GetNormalizedTexCoords(
+      resource_provider->GetResourceBackedSize(resource_id));
   ca_layer_overlay->color = quad->background_color;
   ca_layer_overlay->nearest_neighbor_filter = quad->nearest_neighbor;
   ca_layer_overlay->hdr_metadata =
diff --git a/components/viz/service/display/dc_layer_overlay.cc b/components/viz/service/display/dc_layer_overlay.cc
index 51fb27c..926cbfbb0 100644
--- a/components/viz/service/display/dc_layer_overlay.cc
+++ b/components/viz/service/display/dc_layer_overlay.cc
@@ -540,7 +540,7 @@
   dc_layer.resource_size_in_pixels =
       resource_provider->GetResourceBackedSize(quad->resource_id);
   dc_layer.uv_rect =
-      gfx::BoundingRect(quad->uv_top_left, quad->uv_bottom_right);
+      quad->GetNormalizedTexCoords(dc_layer.resource_size_in_pixels);
   dc_layer.display_rect = gfx::RectF(quad->rect);
   dc_layer.format = resource_provider->GetSharedImageFormat(quad->resource_id);
   dc_layer.color = quad->background_color;
diff --git a/components/viz/service/display/occlusion_culler.cc b/components/viz/service/display/occlusion_culler.cc
index a2170d1..2fea27d 100644
--- a/components/viz/service/display/occlusion_culler.cc
+++ b/components/viz/service/display/occlusion_culler.cc
@@ -20,6 +20,7 @@
 #include "components/viz/common/quads/draw_quad.h"
 #include "components/viz/common/quads/shared_quad_state.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
+#include "components/viz/common/viz_utils.h"
 #include "components/viz/service/display/display_resource_provider.h"
 #include "components/viz/service/display/overlay_processor_interface.h"
 #include "ui/gfx/geometry/rect.h"
@@ -281,6 +282,9 @@
 
 void OcclusionCuller::RemoveOverdrawQuads(AggregatedFrame* frame) {
   base::flat_map<AggregatedRenderPassId, gfx::Rect> backdrop_filter_rects;
+  base::flat_map<AggregatedRenderPassId, raw_ptr<cc::FilterOperations>>
+      foreground_filters;
+
   for (const auto& pass : frame->render_pass_list) {
     if (!pass->backdrop_filters.IsEmpty() &&
         pass->backdrop_filters.HasFilterThatMovesPixels()) {
@@ -290,6 +294,10 @@
       backdrop_filter_rects[pass->id] = cc::MathUtil::MapEnclosingClippedRect(
           pass->transform_to_root_target, pass->output_rect);
     }
+
+    if (!pass->filters.IsEmpty() && pass->filters.HasFilterThatMovesPixels()) {
+      foreground_filters[pass->id] = &pass->filters;
+    }
   }
 
   for (const auto& pass : frame->render_pass_list) {
@@ -297,9 +305,6 @@
     bool last_sqs_is_for_rpdq = false;
 
     cc::Region occlusion_in_target_space;
-    // TODO(b:424284352): Remove after
-    // `kEnableBackdropFiltersCullingOptimization` is enabled by default.
-    cc::Region backdrop_filters_in_target_space;
     bool current_sqs_intersects_occlusion = false;
 
     // TODO(yiyix): Add filter effects to draw occlusion calculation
@@ -314,30 +319,13 @@
     }
 
     auto quad_list_end = pass->quad_list.end();
-
     cc::Region occlusion_in_quad_content_space;
-    // TODO(b:424284352): Remove after
-    // `kEnableBackdropFiltersCullingOptimization` is enabled by default.
-    gfx::Rect render_pass_quads_in_content_space;
 
     for (auto quad = pass->quad_list.begin(); quad != quad_list_end;) {
       // Sanity check: we should not have a Compositor
       // CompositorRenderPassDrawQuad here.
       DCHECK_NE(quad->material, DrawQuad::Material::kCompositorRenderPass);
 
-      if (!features::IsBackdropFiltersCullingOptimizationEnabled()) {
-        if (auto* rpdq = quad->DynamicCast<AggregatedRenderPassDrawQuad>()) {
-          auto it = backdrop_filter_rects.find(rpdq->render_pass_id);
-          if (it != backdrop_filter_rects.end()) {
-            auto& [_, rect_in_target] = *it;
-            backdrop_filters_in_target_space.Union(rect_in_target);
-          }
-
-          ++quad;
-          continue;
-        }
-      }
-
       // Also skip quad if the DrawQuad is inside a 3d object.
       if (quad->shared_quad_state->sorting_context_id != 0) {
         ++quad;
@@ -383,7 +371,7 @@
           }
         }
 
-        if (features::IsBackdropFiltersCullingOptimizationEnabled() && rpdq) {
+        if (rpdq) {
           // A RenderPass with backdrop filters may apply to a quad underlying
           // RenderPassQuad. These regions should be tracked so that correctly
           // handle splitting and occlusion of the underlying quad.
@@ -403,7 +391,6 @@
         last_sqs = quad->shared_quad_state;
         last_sqs_is_for_rpdq = !!rpdq;
         occlusion_in_quad_content_space.Clear();
-        render_pass_quads_in_content_space = gfx::Rect();
 
         const auto current_sqs_in_target_space =
             cc::MathUtil::MapEnclosingClippedRect(
@@ -447,36 +434,34 @@
                   SafeConvertRectForRegion(rect_in_content));
             }
           }
-
-          // A render pass quad may apply some filter or transform to an
-          // underlying quad. Do not split quads when they intersect with a
-          // render pass quad.
-          if (!features::IsBackdropFiltersCullingOptimizationEnabled() &&
-              current_sqs_in_target_space.Intersects(
-                  backdrop_filters_in_target_space.bounds())) {
-            for (auto rect_in_target_space : backdrop_filters_in_target_space) {
-              const auto rect_in_content =
-                  cc::MathUtil::MapEnclosedRectWith2dAxisAlignedTransform(
-                      reverse_transform, rect_in_target_space);
-                render_pass_quads_in_content_space.Union(rect_in_content);
-            }
-          }
         }
       }
 
-      // TODO(zoraiznaeem): Enable occlusion culling on render pass draw quads.
-      if (rpdq || !current_sqs_intersects_occlusion) {
+      if ((!features::IsRenderPassDrawQuadCullingOptimizationEnabled() &&
+           rpdq) ||
+          !current_sqs_intersects_occlusion) {
         ++quad;
         continue;
       }
 
-      if (occlusion_in_quad_content_space.Contains(quad->visible_rect)) {
+      gfx::Rect visible_rect = quad->visible_rect;
+      if (rpdq) {
+        // Render pass draw quads can have pixel-moving filters that expand
+        // their visible bounds.
+        auto filter_it = foreground_filters.find(rpdq->render_pass_id);
+        if (filter_it != foreground_filters.end()) {
+          visible_rect =
+              GetExpandedRectForPixelMovingFilters(*rpdq, *filter_it->second);
+        }
+      }
+
+      if (occlusion_in_quad_content_space.Contains(visible_rect)) {
         // Case 1: for simple transforms (scale or translation), define the
         // occlusion region in the quad content space. If |quad| is not
         // shown on the screen, then set its rect and visible_rect to be empty.
         quad->visible_rect.set_size(gfx::Size());
-      } else if (occlusion_in_quad_content_space.Intersects(
-                     quad->visible_rect)) {
+      } else if (!rpdq &&
+                 occlusion_in_quad_content_space.Intersects(visible_rect)) {
         // Case 2: for simple transforms, if the quad is partially shown on
         // screen and the region formed by (occlusion region - visible_rect) is
         // a rect, then update visible_rect to the resulting rect.
@@ -490,7 +475,6 @@
         // more than X fragments.
         const bool should_split_quads =
             !overlay_processor_->DisableSplittingQuads() &&
-            !visible_region.Intersects(render_pass_quads_in_content_space) &&
             ReduceComplexity(visible_region, settings_.quad_split_limit,
                              reduced_visible_region) &&
             CanSplitDrawQuad(*quad, visible_region.bounds().size(),
@@ -499,8 +483,8 @@
           auto new_quad = pass->quad_list.InsertCopyBeforeDrawQuad(
               quad, reduced_visible_region.size() - 1);
 
-          for (const auto& visible_rect : reduced_visible_region) {
-            new_quad->visible_rect = visible_rect;
+          for (const auto& rect : reduced_visible_region) {
+            new_quad->visible_rect = rect;
             ++new_quad;
           }
 
@@ -509,8 +493,8 @@
         }
       } else if (occlusion_in_quad_content_space.IsEmpty() &&
                  occlusion_in_target_space.Contains(
-                     cc::MathUtil::MapEnclosingClippedRect(
-                         transform, quad->visible_rect))) {
+                     cc::MathUtil::MapEnclosingClippedRect(transform,
+                                                           visible_rect))) {
         // Case 3: for non simple transforms, define the occlusion region in
         // target space. If |quad| is not shown on the screen, then set its
         // rect and visible_rect to be empty.
diff --git a/components/viz/service/display/occlusion_culler_unittest.cc b/components/viz/service/display/occlusion_culler_unittest.cc
index 69e6a05..cc455456 100644
--- a/components/viz/service/display/occlusion_culler_unittest.cc
+++ b/components/viz/service/display/occlusion_culler_unittest.cc
@@ -168,91 +168,200 @@
   EXPECT_EQ(1u, NumVisibleRects(frame.render_pass_list.back()->quad_list));
 }
 
-// Quads that intersect backdrop filter render pass quads should not be
-// split because splitting may affect how the filter applies to an
-// underlying quad.
-// TODO(b:424284352): Remove the test once the optimization is enabled by
-// default.
-TEST_F(OcclusionCullerTest, OcclusionCullingWithIntersectingBackdropFilter) {
-  if (features::IsBackdropFiltersCullingOptimizationEnabled()) {
+// Currently, quad cutting for AggregatedRenderPassDrawQuad is not supported.
+// Only fully occluded AggregatedRenderPassDrawQuad are removed from the frame.
+TEST_F(OcclusionCullerTest, OcclusionCullingForAggregatedRenderPass) {
+  if (!features::IsRenderPassDrawQuadCullingOptimizationEnabled()) {
     GTEST_SKIP();
   }
 
-  RendererSettings::OcclusionCullerSettings settings;
-  settings.minimum_fragments_reduced = 0;
-
-  InitOcclusionCuller(settings);
-  AggregatedFrame frame = MakeDefaultAggregatedFrame(/*num_render_passes=*/2);
+  // z-order: quad > render_pass_1 > render_pass_2
+  InitOcclusionCuller();
+  AggregatedFrame frame = MakeDefaultAggregatedFrame(/*num_render_passes=*/3);
 
   bool are_contents_opaque = true;
   float opacity = 1.f;
 
-  // Rects, shared quad states and quads map 1:1:1
-  std::array<gfx::Rect, 3> rects = {
-      gfx::Rect(75, 0, 50, 100),
-      gfx::Rect(0, 0, 50, 50),
-      gfx::Rect(0, 0, 100, 100),
-  };
+  gfx::Rect quad_1(0, 0, 1000, 1000);
+  gfx::Rect render_pass_1(200, 200, 500, 500);
+  gfx::Rect render_pass_2(700, 0, 500, 500);
 
-  std::array<SharedQuadState*, 3> shared_quad_states;
-  std::array<DrawQuad*, 3> quads;
+  auto& root_render_pass = frame.render_pass_list.at(2);
 
-  // Set up the backdrop filter render pass
-  auto& bd_render_pass = frame.render_pass_list.at(0);
-  auto& root_render_pass = frame.render_pass_list.at(1);
-  auto bd_filter_rect = rects[0];
-
-  cc::FilterOperations backdrop_filters;
-  backdrop_filters.Append(cc::FilterOperation::CreateBlurFilter(5.0));
-  bd_render_pass->SetAll(
-      AggregatedRenderPassId{2}, bd_filter_rect, gfx::Rect(), gfx::Transform(),
-      cc::FilterOperations(), backdrop_filters,
-      SkPath::Rect(gfx::RectToSkRect(bd_filter_rect)),
-      gfx::ContentColorUsage::kSRGB, false, false, false, false);
-
-  // Add quads to root render pass
-  for (int i = 0; i < 3; i++) {
-    shared_quad_states[i] = root_render_pass->CreateAndAppendSharedQuadState();
-    shared_quad_states[i]->SetAll(
-        gfx::Transform(), rects[i], rects[i], gfx::MaskFilterInfo(),
-        /*clip=*/std::nullopt, are_contents_opaque, opacity,
-        SkBlendMode::kSrcOver, /*sorting_context=*/0,
-        /*layer_id=*/0u, /*fast_rounded_corner=*/false);
-
-    if (i == 0) {  // Backdrop filter quad
-      auto* new_quad =
-          root_render_pass->quad_list
-              .AllocateAndConstruct<AggregatedRenderPassDrawQuad>();
-      new_quad->SetNew(shared_quad_states[i], rects[i], rects[i],
-                       bd_render_pass->id, ResourceId(2), gfx::RectF(),
-                       gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF(),
-                       gfx::RectF(), false, 1.f);
-      quads[i] = new_quad;
-    } else {
-      auto* new_quad = root_render_pass->quad_list
-                           .AllocateAndConstruct<SolidColorDrawQuad>();
-      new_quad->SetNew(shared_quad_states[i], rects[i], rects[i],
-                       SkColors::kBlack, false);
-      quads[i] = new_quad;
-    }
+  {
+    auto& render_pass = frame.render_pass_list.at(0);
+    render_pass->SetNew(AggregatedRenderPassId{1}, render_pass_1, render_pass_1,
+                        gfx::Transform());
+  }
+  {
+    auto& render_pass = frame.render_pass_list.at(1);
+    render_pass->SetNew(AggregatedRenderPassId{2}, render_pass_2, render_pass_2,
+                        gfx::Transform());
   }
 
-  // +---+-+-+-+
-  // | 1 | | . |
-  // +---+ | 0 |
-  // | 2   | . |
-  // +-----+---+
-  EXPECT_EQ(std::size(rects), root_render_pass->quad_list.size());
+  {
+    SharedQuadState* shared_quad_state =
+        frame.render_pass_list.front()->CreateAndAppendSharedQuadState();
+    shared_quad_state->SetAll(gfx::Transform(), quad_1, quad_1,
+                              gfx::MaskFilterInfo(),
+                              /*clip=*/std::nullopt, are_contents_opaque,
+                              opacity, SkBlendMode::kSrcOver,
+                              /*sorting_context=*/0,
+                              /*layer_id=*/0u, /*fast_rounded_corner=*/false);
+
+    auto* quad =
+        root_render_pass->quad_list.AllocateAndConstruct<SolidColorDrawQuad>();
+    quad->SetNew(shared_quad_state, quad_1, quad_1, SkColors::kBlack, false);
+  }
+  {
+    SharedQuadState* shared_quad_state =
+        frame.render_pass_list.front()->CreateAndAppendSharedQuadState();
+    shared_quad_state->SetAll(gfx::Transform(), render_pass_1, render_pass_1,
+                              gfx::MaskFilterInfo(),
+                              /*clip=*/std::nullopt, are_contents_opaque,
+                              opacity, SkBlendMode::kSrcOver,
+                              /*sorting_context=*/0,
+                              /*layer_id=*/0u, /*fast_rounded_corner=*/false);
+
+    auto* quad = root_render_pass->quad_list
+                     .AllocateAndConstruct<AggregatedRenderPassDrawQuad>();
+    quad->SetNew(shared_quad_state, render_pass_1, render_pass_1,
+                 frame.render_pass_list.at(0)->id, ResourceId(1), gfx::RectF(),
+                 gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF(), gfx::RectF(),
+                 false, 1.f);
+  }
+  {
+    SharedQuadState* shared_quad_state =
+        frame.render_pass_list.front()->CreateAndAppendSharedQuadState();
+    shared_quad_state->SetAll(gfx::Transform(), render_pass_2, render_pass_2,
+                              gfx::MaskFilterInfo(),
+                              /*clip=*/std::nullopt, are_contents_opaque,
+                              opacity, SkBlendMode::kSrcOver,
+                              /*sorting_context=*/0,
+                              /*layer_id=*/0u, /*fast_rounded_corner=*/false);
+
+    auto* quad = root_render_pass->quad_list
+                     .AllocateAndConstruct<AggregatedRenderPassDrawQuad>();
+    quad->SetNew(shared_quad_state, render_pass_2, render_pass_2,
+                 frame.render_pass_list.at(1)->id, ResourceId(2), gfx::RectF(),
+                 gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF(), gfx::RectF(),
+                 false, 1.f);
+  }
+
+  EXPECT_EQ(NumVisibleRects(root_render_pass->quad_list), 3u);
   occlusion_culler()->RemoveOverdrawQuads(&frame);
-  ASSERT_EQ(std::size(rects), root_render_pass->quad_list.size());
+  EXPECT_EQ(NumVisibleRects(root_render_pass->quad_list), 2u);
 
-  for (int i = 0; i < 3; i++) {
-    EXPECT_EQ(rects[i], root_render_pass->quad_list.ElementAt(i)->visible_rect);
-  }
+  // `render_pass_1` is fully occluded by quad_1 so it is removed from the
+  // frame. `render_pass_2` is partially occluded by quad_1 and since we do
+  // not support quad cutting for AggregatedRenderPasses, `render_pass_2`
+  // remains untouched.
+  auto& quad_list = root_render_pass->quad_list;
+  EXPECT_EQ(quad_list.ElementAt(0)->visible_rect, quad_1);
+  EXPECT_TRUE(quad_list.ElementAt(1)->visible_rect.IsEmpty());
+  EXPECT_EQ(quad_list.ElementAt(2)->visible_rect, render_pass_2);
 }
 
 TEST_F(OcclusionCullerTest,
-       OcclusionCullingWithIntersectingBackdropFilterWithOptimization) {
+       OcclusionCullingForAggregatedRenderPassWithExpandedDamage) {
+  if (!features::IsRenderPassDrawQuadCullingOptimizationEnabled()) {
+    GTEST_SKIP();
+  }
+
+  InitOcclusionCuller();
+  AggregatedFrame frame = MakeDefaultAggregatedFrame(/*num_render_passes=*/3);
+
+  bool are_contents_opaque = true;
+  float opacity = 1.f;
+
+  gfx::Rect quad_1(0, 0, 1000, 1000);
+  gfx::Rect foreground_filter_rect_1(0, 0, 1000, 1000);
+  gfx::Rect foreground_filter_rect_2(0, 0, 1000, 1000);
+
+  auto& foreground_render_pass_1 = frame.render_pass_list.at(0);
+  auto& foreground_render_pass_2 = frame.render_pass_list.at(1);
+  auto& root_render_pass = frame.render_pass_list.at(2);
+
+  cc::FilterOperations foreground_filters_1;
+  foreground_filters_1.Append(cc::FilterOperation::CreateBlurFilter(5.0));
+
+  cc::FilterOperations foreground_filters_2;
+  foreground_filters_2.Append(cc::FilterOperation::CreateOpacityFilter(5.0));
+
+  foreground_render_pass_1->SetAll(
+      AggregatedRenderPassId{1}, foreground_filter_rect_1, gfx::Rect(),
+      gfx::Transform(), foreground_filters_1, cc::FilterOperations(),
+      SkPath::Rect(gfx::RectToSkRect(foreground_filter_rect_1)),
+      gfx::ContentColorUsage::kSRGB, false, false, false, false);
+
+  foreground_render_pass_2->SetAll(
+      AggregatedRenderPassId{2}, foreground_filter_rect_2, gfx::Rect(),
+      gfx::Transform(), foreground_filters_2, cc::FilterOperations(),
+      SkPath::Rect(gfx::RectToSkRect(foreground_filter_rect_2)),
+      gfx::ContentColorUsage::kSRGB, false, false, false, false);
+
+  {
+    SharedQuadState* shared_quad_state =
+        frame.render_pass_list.front()->CreateAndAppendSharedQuadState();
+    shared_quad_state->SetAll(gfx::Transform(), quad_1, quad_1,
+                              gfx::MaskFilterInfo(),
+                              /*clip=*/std::nullopt, are_contents_opaque,
+                              opacity, SkBlendMode::kSrcOver,
+                              /*sorting_context=*/0,
+                              /*layer_id=*/0u, /*fast_rounded_corner=*/false);
+
+    auto* quad =
+        root_render_pass->quad_list.AllocateAndConstruct<SolidColorDrawQuad>();
+    quad->SetNew(shared_quad_state, quad_1, quad_1, SkColors::kBlack, false);
+  }
+
+  {
+    SharedQuadState* shared_quad_state =
+        frame.render_pass_list.front()->CreateAndAppendSharedQuadState();
+    shared_quad_state->SetAll(gfx::Transform(), foreground_filter_rect_1,
+                              foreground_filter_rect_1, gfx::MaskFilterInfo(),
+                              /*clip=*/std::nullopt, are_contents_opaque,
+                              opacity, SkBlendMode::kSrcOver,
+                              /*sorting_context=*/0,
+                              /*layer_id=*/0u, /*fast_rounded_corner=*/false);
+
+    auto* quad = root_render_pass->quad_list
+                     .AllocateAndConstruct<AggregatedRenderPassDrawQuad>();
+    quad->SetNew(shared_quad_state, foreground_filter_rect_1,
+                 foreground_filter_rect_1, foreground_render_pass_1->id,
+                 ResourceId(1), gfx::RectF(), gfx::Size(), gfx::Vector2dF(1, 1),
+                 gfx::PointF(), gfx::RectF(), false, 1.f);
+  }
+
+  {
+    SharedQuadState* shared_quad_state =
+        frame.render_pass_list.front()->CreateAndAppendSharedQuadState();
+    shared_quad_state->SetAll(gfx::Transform(), foreground_filter_rect_2,
+                              foreground_filter_rect_2, gfx::MaskFilterInfo(),
+                              /*clip=*/std::nullopt, are_contents_opaque,
+                              opacity, SkBlendMode::kSrcOver,
+                              /*sorting_context=*/0,
+                              /*layer_id=*/0u, /*fast_rounded_corner=*/false);
+
+    auto* quad = root_render_pass->quad_list
+                     .AllocateAndConstruct<AggregatedRenderPassDrawQuad>();
+    quad->SetNew(shared_quad_state, foreground_filter_rect_2,
+                 foreground_filter_rect_2, foreground_render_pass_2->id,
+                 ResourceId(2), gfx::RectF(), gfx::Size(), gfx::Vector2dF(1, 1),
+                 gfx::PointF(), gfx::RectF(), false, 1.f);
+  }
+
+  EXPECT_EQ(NumVisibleRects(root_render_pass->quad_list), 3u);
+  occlusion_culler()->RemoveOverdrawQuads(&frame);
+  EXPECT_EQ(NumVisibleRects(root_render_pass->quad_list), 2u);
+
+  auto& quad_list = root_render_pass->quad_list;
+  EXPECT_EQ(quad_list.ElementAt(0)->visible_rect, quad_1);
+  EXPECT_EQ(quad_list.ElementAt(1)->visible_rect, foreground_filter_rect_1);
+  EXPECT_TRUE(quad_list.ElementAt(2)->visible_rect.IsEmpty());
+}
+
+TEST_F(OcclusionCullerTest, OcclusionCullingWithIntersectingBackdropFilter) {
   //
   // +-----------------------------+ quad_2 (0,0 1000x1000)
   // |                             |
@@ -270,10 +379,6 @@
   // z-order: backdrop_render_pass_1 > quad_1 > backdrop_render_pass_2
   // > quad_2
 
-  if (!features::IsBackdropFiltersCullingOptimizationEnabled()) {
-    GTEST_SKIP();
-  }
-
   RendererSettings::OcclusionCullerSettings settings;
   settings.minimum_fragments_reduced = 0;
 
@@ -384,10 +489,6 @@
 
 TEST_F(OcclusionCullerTest, EnsureOccluderComplexityWithBackdropFilters) {
   // z-order: quad_1 > backdrop_render_pass_1 >> quad_2
-  if (!features::IsBackdropFiltersCullingOptimizationEnabled()) {
-    GTEST_SKIP();
-  }
-
   RendererSettings::OcclusionCullerSettings settings;
   settings.minimum_fragments_reduced = 0;
   settings.maximum_occluder_complexity = 2;
diff --git a/components/viz/service/display/overlay_candidate_factory.cc b/components/viz/service/display/overlay_candidate_factory.cc
index 8b7be6f..c2801b58 100644
--- a/components/viz/service/display/overlay_candidate_factory.cc
+++ b/components/viz/service/display/overlay_candidate_factory.cc
@@ -661,7 +661,11 @@
     return CandidateStatus::kFailBlending;
   }
 
-  candidate.uv_rect = BoundingRect(quad->uv_top_left, quad->uv_bottom_right);
+  if (quad->resource_id != kInvalidResourceId) {
+    auto resource_size_in_pixels =
+        resource_provider_->GetResourceBackedSize(quad->resource_id);
+    candidate.uv_rect = quad->GetNormalizedTexCoords(resource_size_in_pixels);
+  }
 
   const bool y_flipped = resource_provider_->GetOrigin(quad->resource_id) ==
                          kBottomLeft_GrSurfaceOrigin;
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc
index 2a2c2095..8e3d17a9 100644
--- a/components/viz/service/display/overlay_unittest.cc
+++ b/components/viz/service/display/overlay_unittest.cc
@@ -5037,8 +5037,8 @@
   auto* tex_rect = CreateCandidateQuadAt(
 
       pass->shared_quad_state_list.back(), pass.get(), kSmallCandidateRect);
-  tex_rect->uv_bottom_right = gfx::PointF(1, 1);
-  tex_rect->uv_top_left = gfx::PointF(0, 0);
+  tex_rect->SetNormalizedTexCoordsForTesting(gfx::RectF(0, 0, 1, 1),
+                                             kSmallCandidateRect.size());
   pass->shared_quad_state_list.back()->clip_rect = kTestClip;
   // Check for potential candidates.
   OverlayCandidateList candidate_list;
@@ -5065,10 +5065,9 @@
   const auto kSmallCandidateRect = gfx::Rect(0, 0, 100, 100);
   const auto kTestClip = gfx::Rect(0, 50, 50, 50);
   auto* tex_rect = CreateCandidateQuadAt(
-
       pass->shared_quad_state_list.back(), pass.get(), kSmallCandidateRect);
-  tex_rect->uv_bottom_right = gfx::PointF(1, 1);
-  tex_rect->uv_top_left = gfx::PointF(0, 0);
+  tex_rect->SetNormalizedTexCoordsForTesting(gfx::RectF(0, 0, 1, 1),
+                                             kSmallCandidateRect.size());
   tex_rect->visible_rect = kTestClip;
   // Check for potential candidates.
   OverlayCandidateList candidate_list;
@@ -5115,8 +5114,10 @@
   EXPECT_EQ(1U, test::NumOverlaysExcludingPrimaryPlane(candidate_list));
   auto expected_rect = kTestClip;
   expected_rect.Intersect(kSmallCandidateRect);
+  const gfx::RectF tex_coord_rect =
+      tex_rect->GetNormalizedTexCoords(kSmallCandidateRect.size());
   gfx::RectF uv_rect = cc::MathUtil::ScaleRectProportional(
-      BoundingRect(tex_rect->uv_top_left, tex_rect->uv_bottom_right),
+      BoundingRect(tex_coord_rect.origin(), tex_coord_rect.bottom_right()),
       gfx::RectF(kSmallCandidateRect), gfx::RectF(expected_rect));
   EXPECT_RECTF_NEAR(gfx::RectF(expected_rect), candidate_list[0].display_rect,
                     0.01f);
@@ -5164,10 +5165,9 @@
   const auto kOversizedCandidateRect =
       gfx::Rect(kDisplaySize.height() * 2, kDisplaySize.width() * 2);
   auto* tex_rect = CreateCandidateQuadAt(
-
       pass->shared_quad_state_list.back(), pass.get(), kOversizedCandidateRect);
-  tex_rect->uv_bottom_right = gfx::PointF(1, 1);
-  tex_rect->uv_top_left = gfx::PointF(0, 0);
+  tex_rect->SetNormalizedTexCoordsForTesting(gfx::RectF(0, 0, 1, 1),
+                                             kOversizedCandidateRect.size());
   // Check for potential candidates.
   OverlayCandidateList candidate_list;
   AggregatedRenderPassList pass_list;
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc
index a0267ff..1f99ae4 100644
--- a/components/viz/service/display/renderer_pixeltest.cc
+++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -64,6 +64,8 @@
 #include "third_party/skia/include/private/chromium/SkPMColor.h"
 #include "ui/gfx/color_transform.h"
 #include "ui/gfx/geometry/mask_filter_info.h"
+#include "ui/gfx/geometry/point_f.h"
+#include "ui/gfx/geometry/rect_f.h"
 #include "ui/gfx/geometry/skia_conversions.h"
 #include "ui/gfx/geometry/transform_util.h"
 #include "ui/gfx/video_types.h"
@@ -975,8 +977,9 @@
   quad->rect.Offset(10, 10);
   quad->visible_rect.Offset(10, 10);
   quad->visible_rect.Inset(gfx::Insets::TLBR(50, 30, 12, 12));
-  quad->uv_top_left.SetPoint(.2, .3);
-  quad->uv_bottom_right.SetPoint(.4, .7);
+  quad->SetNormalizedTexCoordsForTesting(
+      gfx::BoundingRect(gfx::PointF(0.2f, 0.3f), gfx::PointF(0.4f, 0.7f)),
+      this->device_viewport_size_);
   quad->nearest_neighbor = true;  // To avoid bilinear filter differences.
   SharedQuadState* color_quad_state = CreateTestSharedQuadState(
       gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc
index d96f2bee..db16606 100644
--- a/components/viz/service/display/skia_renderer.cc
+++ b/components/viz/service/display/skia_renderer.cc
@@ -2634,9 +2634,9 @@
   const SkImage* image = builder.sk_image();
   if (!image)
     return;
-  gfx::RectF uv_rect = gfx::ScaleRect(
-      gfx::BoundingRect(quad->uv_top_left, quad->uv_bottom_right),
-      image->width(), image->height());
+
+  gfx::RectF uv_rect = quad->GetUnnormalizedTexCoords(
+      gfx::Size(image->width(), image->height()));
   params->vis_tex_coords = cc::MathUtil::ScaleRectProportional(
       uv_rect, gfx::RectF(quad->rect), params->visible_rect);
 
diff --git a/components/viz/service/display/software_renderer.cc b/components/viz/service/display/software_renderer.cc
index 8f7f2fd..f28afe94 100644
--- a/components/viz/service/display/software_renderer.cc
+++ b/components/viz/service/display/software_renderer.cc
@@ -446,9 +446,8 @@
   if (!lock.valid())
     return;
   const SkImage* image = lock.sk_image();
-  gfx::RectF uv_rect = gfx::ScaleRect(
-      gfx::BoundingRect(quad->uv_top_left, quad->uv_bottom_right),
-      image->width(), image->height());
+  gfx::RectF uv_rect = quad->GetUnnormalizedTexCoords(
+      gfx::Size(image->width(), image->height()));
   gfx::RectF visible_uv_rect = cc::MathUtil::ScaleRectProportional(
       uv_rect, gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect));
   SkRect sk_uv_rect = gfx::RectFToSkRect(visible_uv_rect);
diff --git a/components/viz/service/layers/layer_context_impl.cc b/components/viz/service/layers/layer_context_impl.cc
index 95071d22..635ed44 100644
--- a/components/viz/service/layers/layer_context_impl.cc
+++ b/components/viz/service/layers/layer_context_impl.cc
@@ -395,6 +395,11 @@
   node.filters = wire.filters;
   node.backdrop_filters = wire.backdrop_filters;
   node.backdrop_filter_bounds = wire.backdrop_filter_bounds;
+  if (wire.backdrop_filter_quality <= 0.0f ||
+      wire.backdrop_filter_quality > 1.0f ||
+      !std::isfinite(wire.backdrop_filter_quality)) {
+    return base::unexpected("Invalid backdrop_filter_quality");
+  }
   node.backdrop_filter_quality = wire.backdrop_filter_quality;
   node.backdrop_mask_element_id = wire.backdrop_mask_element_id;
   node.mask_filter_info = wire.mask_filter_info;
@@ -550,6 +555,18 @@
     cc::PropertyTrees& trees,
     cc::TransformTree& tree,
     mojom::TransformTreeUpdate& update) {
+  if (update.page_scale_factor <= 0 ||
+      !std::isfinite(update.page_scale_factor)) {
+    return base::unexpected("Invalid page_scale_factor");
+  }
+  if (update.device_scale_factor <= 0 ||
+      !std::isfinite(update.device_scale_factor)) {
+    return base::unexpected("Invalid device_scale_factor");
+  }
+  if (update.device_transform_scale_factor <= 0 ||
+      !std::isfinite(update.device_transform_scale_factor)) {
+    return base::unexpected("Invalid device_transform_scale_factor");
+  }
   tree.set_page_scale_factor(update.page_scale_factor);
   tree.set_device_scale_factor(update.device_scale_factor);
   tree.set_device_transform_scale_factor(update.device_transform_scale_factor);
@@ -570,6 +587,11 @@
     cc::PropertyTrees& trees,
     cc::ScrollTree& tree,
     const mojom::ScrollTreeUpdate& update) {
+  for (auto const& [element_id, overscroll] : update.elastic_overscroll) {
+    if (!std::isfinite(overscroll.x()) || !std::isfinite(overscroll.y())) {
+      return base::unexpected("Invalid elastic_overscroll");
+    }
+  }
   tree.synced_scroll_offset_map() = update.synced_scroll_offsets;
   tree.scrolling_contents_cull_rects() = update.scrolling_contents_cull_rects;
   bool elastic_overscroll_changed =
@@ -1881,6 +1903,21 @@
       !std::isfinite(update->max_safe_area_inset_bottom)) {
     return base::unexpected("Invalid max safe area inset bottom");
   }
+  if (update->browser_controls_params.top_controls_height < 0 ||
+      !std::isfinite(update->browser_controls_params.top_controls_height) ||
+      update->browser_controls_params.top_controls_min_height < 0 ||
+      !std::isfinite(update->browser_controls_params.top_controls_min_height) ||
+      update->browser_controls_params.bottom_controls_height < 0 ||
+      !std::isfinite(update->browser_controls_params.bottom_controls_height) ||
+      update->browser_controls_params.bottom_controls_min_height < 0 ||
+      !std::isfinite(
+          update->browser_controls_params.bottom_controls_min_height) ||
+      update->browser_controls_params.top_controls_min_height >
+          update->browser_controls_params.top_controls_height ||
+      update->browser_controls_params.bottom_controls_min_height >
+          update->browser_controls_params.bottom_controls_height) {
+    return base::unexpected("Invalid browser controls params");
+  }
   layers.SetBrowserControlsParams(update->browser_controls_params);
   host_impl_->browser_controls_manager()->SetOffsetTagModifications(
       update->browser_controls_offset_tag_modifications);
diff --git a/components/viz/service/layers/layer_context_impl_property_trees_unittest.cc b/components/viz/service/layers/layer_context_impl_property_trees_unittest.cc
index 0332143..e4d2c9b8 100644
--- a/components/viz/service/layers/layer_context_impl_property_trees_unittest.cc
+++ b/components/viz/service/layers/layer_context_impl_property_trees_unittest.cc
@@ -41,6 +41,12 @@
 
 class LayerContextImplPropertyTreesTestBase : public LayerContextImplTest {
  protected:
+  base::expected<void, std::string> ApplyDefaultUpdate() {
+    // Apply a default valid update first.
+    auto update = CreateDefaultUpdate();
+    return layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  }
+
   mojom::TransformNodePtr CreateDefaultSecondaryRootTransformNode() {
     auto node = mojom::TransformNode::New();
     node->id = cc::kSecondaryRootPropertyNodeId;
@@ -80,9 +86,7 @@
 TEST_F(LayerContextImplPropertyTreesTestBase,
        AnyTreeChangedTriggersResetCachedDataAndNeedsUpdateDrawProperties) {
   // Initial update to set up the tree.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
   auto* active_tree = layer_context_impl_->host_impl()->active_tree();
 
   // --- Test Transform Node Change ---
@@ -181,10 +185,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateExistingTransformNodeProperties) {
-  // Apply a default valid update first.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -220,9 +221,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeToParent) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -243,9 +242,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeSnapAmount) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -264,9 +261,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeHasPotentialAnimation) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -284,9 +279,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeIsCurrentlyAnimating) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -304,9 +297,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeScrolls) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -324,9 +315,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeShouldUndoOverscroll) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -344,9 +333,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeShouldBeSnapped) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -364,9 +351,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeMovedByOuterViewportBoundsDeltaY) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -384,9 +369,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeTransformChanged) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -404,9 +387,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeDelegatesToParentForBackface) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -424,9 +405,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeMaximumAnimationScale) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -445,9 +424,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeNodeAndAncestorsAreAnimatedOrInvertible) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -465,9 +442,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeIsInvertible) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -485,9 +460,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeAncestorsAreInvertible) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -505,9 +478,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeNodeAndAncestorsAreFlat) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -525,9 +496,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeNodeOrAncestorsWillChangeTransform) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -545,9 +514,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        UpdateTransformNodeVisibleFrameElementId) {
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootTransformNode();
@@ -567,9 +534,7 @@
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        AddRemoveTransformNodes) {
   // Apply a default valid update first.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
   uint32_t initial_node_count = layer_context_impl_->host_impl()
                                     ->active_tree()
                                     ->property_trees()
@@ -775,9 +740,7 @@
 TEST_F(LayerContextImplUpdateDisplayTreeTransformNodeTest,
        InvalidParentFrameId) {
   // Apply a default valid update first to set up the tree.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = mojom::TransformNode::New();
@@ -812,9 +775,7 @@
        InvalidStickyPositionConstraintId_EmptyData) {
   // Apply a default valid update. sticky_position_data will be empty by
   // default.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
   ASSERT_TRUE(layer_context_impl_->host_impl()
                   ->active_tree()
                   ->property_trees()
@@ -863,9 +824,7 @@
        InvalidAnchorPositionScrollDataId_EmptyData) {
   // Apply a default valid update. anchor_position_scroll_data will be empty by
   // default.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
   ASSERT_TRUE(layer_context_impl_->host_impl()
                   ->active_tree()
                   ->property_trees()
@@ -946,9 +905,7 @@
 TEST_F(LayerContextImplUpdateDisplayTreeClipNodeTest,
        UpdateExistingClipNodeProperties) {
   // Apply a default valid update first.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootClipNode();
@@ -969,9 +926,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeClipNodeTest, AddRemoveClipNodes) {
   // Apply a default valid update first.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
   uint32_t initial_node_count = layer_context_impl_->host_impl()
                                     ->active_tree()
                                     ->property_trees()
@@ -1158,9 +1113,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeEffectNodeTest, AddRemoveEffectNodes) {
   // Apply a default valid update first.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
   uint32_t initial_node_count = layer_context_impl_->host_impl()
                                     ->active_tree()
                                     ->property_trees()
@@ -1209,9 +1162,7 @@
 TEST_F(LayerContextImplUpdateDisplayTreeEffectNodeTest,
        AddRemoveCopyOutputRequests) {
   // Apply a default valid update first.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   // Add a copy request.
   auto update_add_request = CreateDefaultUpdate();
@@ -1880,7 +1831,7 @@
 TEST_F(LayerContextImplUpdateDisplayTreeEffectNodeTest, BackdropFilterQuality) {
   auto update = CreateDefaultUpdate();
   auto node_update = CreateDefaultSecondaryRootEffectNode();
-  node_update->backdrop_filter_quality = 2.f;
+  node_update->backdrop_filter_quality = 0.5f;
   update->effect_nodes.push_back(std::move(node_update));
 
   auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
@@ -1889,7 +1840,7 @@
   cc::EffectNode* node_impl =
       GetEffectNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
   ASSERT_TRUE(node_impl);
-  EXPECT_EQ(node_impl->backdrop_filter_quality, 2.f);
+  EXPECT_EQ(node_impl->backdrop_filter_quality, 0.5f);
 }
 
 class LayerContextImplUpdateDisplayTreeScrollNodeTest
@@ -1913,10 +1864,7 @@
 
 TEST_F(LayerContextImplUpdateDisplayTreeScrollNodeTest,
        UpdateExistingScrollNodeProperties) {
-  // Apply a default valid update first.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
 
   auto update2 = CreateDefaultUpdate();
   auto node_update = mojom::ScrollNode::New();
@@ -1947,10 +1895,7 @@
 }
 
 TEST_F(LayerContextImplUpdateDisplayTreeScrollNodeTest, AddRemoveScrollNodes) {
-  // Apply a default valid update first.
-  auto update1 = CreateDefaultUpdate();
-  EXPECT_TRUE(
-      layer_context_impl_->DoUpdateDisplayTree(std::move(update1)).has_value());
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
   uint32_t initial_node_count = layer_context_impl_->host_impl()
                                     ->active_tree()
                                     ->property_trees()
@@ -2160,6 +2105,154 @@
             "Invalid parent_id for non-root property tree node");
 }
 
+class LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest
+    : public LayerContextImplUpdateDisplayTreeScrollNodeTest,
+      public ::testing::WithParamInterface<bool> {
+ protected:
+  mojom::ScrollNodePtr CreateDefaultScrollNodeUpdate() {
+    auto node_update = mojom::ScrollNode::New();
+    node_update->id = cc::kSecondaryRootPropertyNodeId;
+    node_update->parent_id = cc::kRootPropertyNodeId;
+    node_update->transform_id = cc::kSecondaryRootPropertyNodeId;
+    return node_update;
+  }
+};
+
+TEST_P(LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest,
+       MaxScrollOffsetAffectedByPageScale) {
+  const bool max_scroll_offset_affected_by_page_scale = GetParam();
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
+
+  auto update = CreateDefaultUpdate();
+  auto node_update = CreateDefaultScrollNodeUpdate();
+  if (max_scroll_offset_affected_by_page_scale) {
+    node_update->max_scroll_offset_affected_by_page_scale =
+        max_scroll_offset_affected_by_page_scale;
+  }
+  update->scroll_nodes.push_back(std::move(node_update));
+
+  cc::ScrollNode* node_impl =
+      GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
+  ASSERT_TRUE(node_impl);
+  EXPECT_FALSE(node_impl->max_scroll_offset_affected_by_page_scale);
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_TRUE(result.has_value());
+
+  node_impl = GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
+  ASSERT_TRUE(node_impl);
+  EXPECT_EQ(node_impl->max_scroll_offset_affected_by_page_scale,
+            max_scroll_offset_affected_by_page_scale);
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest,
+       ScrollsInnerViewport) {
+  const bool scrolls_inner_viewport = GetParam();
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
+
+  auto update = CreateDefaultUpdate();
+  auto node_update = CreateDefaultScrollNodeUpdate();
+  if (scrolls_inner_viewport) {
+    node_update->scrolls_inner_viewport = scrolls_inner_viewport;
+  }
+  update->scroll_nodes.push_back(std::move(node_update));
+
+  cc::ScrollNode* node_impl =
+      GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
+  ASSERT_TRUE(node_impl);
+  EXPECT_FALSE(node_impl->scrolls_inner_viewport);
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_TRUE(result.has_value());
+
+  node_impl = GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
+  ASSERT_TRUE(node_impl);
+  EXPECT_EQ(node_impl->scrolls_inner_viewport, scrolls_inner_viewport);
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest,
+       ScrollsOuterViewport) {
+  const bool scrolls_outer_viewport = GetParam();
+  // Apply a default valid update first.
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
+
+  auto update = CreateDefaultUpdate();
+  auto node_update = CreateDefaultScrollNodeUpdate();
+  if (scrolls_outer_viewport) {
+    node_update->scrolls_outer_viewport = scrolls_outer_viewport;
+  }
+  update->scroll_nodes.push_back(std::move(node_update));
+
+  cc::ScrollNode* node_impl =
+      GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
+  ASSERT_TRUE(node_impl);
+  EXPECT_FALSE(node_impl->scrolls_outer_viewport);
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_TRUE(result.has_value());
+
+  node_impl = GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
+  ASSERT_TRUE(node_impl);
+  EXPECT_EQ(node_impl->scrolls_outer_viewport, scrolls_outer_viewport);
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest,
+       PreventViewportScrollingFromInner) {
+  const bool prevent_viewport_scrolling_from_inner = GetParam();
+  // Apply a default valid update first.
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
+
+  auto update = CreateDefaultUpdate();
+  auto node_update = CreateDefaultScrollNodeUpdate();
+  if (prevent_viewport_scrolling_from_inner) {
+    node_update->prevent_viewport_scrolling_from_inner =
+        prevent_viewport_scrolling_from_inner;
+  }
+  update->scroll_nodes.push_back(std::move(node_update));
+
+  cc::ScrollNode* node_impl =
+      GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
+  ASSERT_TRUE(node_impl);
+  EXPECT_FALSE(node_impl->prevent_viewport_scrolling_from_inner);
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_TRUE(result.has_value());
+
+  node_impl = GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
+  ASSERT_TRUE(node_impl);
+  EXPECT_EQ(node_impl->prevent_viewport_scrolling_from_inner,
+            prevent_viewport_scrolling_from_inner);
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest,
+       IsComposited) {
+  const bool is_composited = GetParam();
+  // Apply a default valid update first.
+  EXPECT_TRUE(ApplyDefaultUpdate().has_value());
+
+  auto update = CreateDefaultUpdate();
+  auto node_update = CreateDefaultScrollNodeUpdate();
+  if (is_composited) {
+    node_update->is_composited = is_composited;
+  }
+  update->scroll_nodes.push_back(std::move(node_update));
+
+  cc::ScrollNode* node_impl =
+      GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
+  ASSERT_TRUE(node_impl);
+  EXPECT_FALSE(node_impl->is_composited);
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_TRUE(result.has_value());
+
+  node_impl = GetScrollNodeFromActiveTree(cc::kSecondaryRootPropertyNodeId);
+  ASSERT_TRUE(node_impl);
+  EXPECT_EQ(node_impl->is_composited, is_composited);
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    DefaultValues,
+    LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest,
+    ::testing::Values(true, false),
+    [](const testing::TestParamInfo<
+        LayerContextImplUpdateDisplayTreeScrollNodeWithBoolParamTest::
+            ParamType>& info) { return info.param ? "True" : "False"; });
+
 class LayerContextImplUpdateDisplayTreePageScaleFactorTest
     : public LayerContextImplTest,
       public ::testing::WithParamInterface<std::tuple<float, bool>> {};
diff --git a/components/viz/service/layers/layer_context_impl_unittest.cc b/components/viz/service/layers/layer_context_impl_unittest.cc
index 0238fdf..2cf9950 100644
--- a/components/viz/service/layers/layer_context_impl_unittest.cc
+++ b/components/viz/service/layers/layer_context_impl_unittest.cc
@@ -4012,5 +4012,325 @@
       layer_context_impl_->host_impl()->viewport_damage_rect_for_testing());
 }
 
+class LayerContextImplUpdateDisplayTreeInvalidValuesTest
+    : public LayerContextImplTest,
+      public ::testing::WithParamInterface<float> {};
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidValuesTest, PageScaleFactor) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->page_scale_factor = invalid_value;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid page scale factors");
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidValuesTest, MinPageScaleFactor) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->min_page_scale_factor = invalid_value;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid page scale factors");
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidValuesTest, MaxPageScaleFactor) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->max_page_scale_factor = invalid_value;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid page scale factors");
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    InvalidFloats,
+    LayerContextImplUpdateDisplayTreeInvalidValuesTest,
+    ::testing::Values(std::numeric_limits<float>::infinity(),
+                      -std::numeric_limits<float>::infinity(),
+                      std::numeric_limits<float>::quiet_NaN(),
+                      0.0f,
+                      -1.0f),
+    [](const testing::TestParamInfo<
+        LayerContextImplUpdateDisplayTreeInvalidValuesTest::ParamType>& info) {
+      if (std::isinf(info.param)) {
+        return info.param > 0 ? "Infinity" : "NegativeInfinity";
+      }
+      if (std::isnan(info.param)) {
+        return "NaN";
+      }
+      if (info.param == 0.0f) {
+        return "Zero";
+      }
+      if (info.param < 0.0f) {
+        return "Negative";
+      }
+      return "Other";
+    });
+
+TEST_F(LayerContextImplTest, InvalidMinMaxPageScaleFactor) {
+  auto update = CreateDefaultUpdate();
+  update->min_page_scale_factor = 2.0f;
+  update->max_page_scale_factor = 1.0f;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid page scale factors");
+}
+
+class LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest
+    : public LayerContextImplTest,
+      public ::testing::WithParamInterface<float> {};
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest,
+       TopControlsHeight) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->browser_controls_params.top_controls_height = invalid_value;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid browser controls params");
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest,
+       TopControlsMinHeight) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->browser_controls_params.top_controls_min_height = invalid_value;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid browser controls params");
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest,
+       BottomControlsHeight) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->browser_controls_params.bottom_controls_height = invalid_value;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid browser controls params");
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest,
+       BottomControlsMinHeight) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->browser_controls_params.bottom_controls_min_height = invalid_value;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid browser controls params");
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    InvalidFloats,
+    LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest,
+    ::testing::Values(std::numeric_limits<float>::infinity(),
+                      -std::numeric_limits<float>::infinity(),
+                      std::numeric_limits<float>::quiet_NaN(),
+                      -1.0f),
+    [](const testing::TestParamInfo<
+        LayerContextImplUpdateDisplayTreeInvalidBrowserControlsTest::ParamType>&
+           info) {
+      if (std::isinf(info.param)) {
+        return info.param > 0 ? "Infinity" : "NegativeInfinity";
+      }
+      if (std::isnan(info.param)) {
+        return "NaN";
+      }
+      if (info.param < 0.0f) {
+        return "Negative";
+      }
+      return "Other";
+    });
+
+TEST_F(LayerContextImplTest, InvalidMinMaxBrowserControlsHeight) {
+  auto update = CreateDefaultUpdate();
+  update->browser_controls_params.top_controls_height = 10.f;
+  update->browser_controls_params.top_controls_min_height = 20.f;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid browser controls params");
+
+  update = CreateDefaultUpdate();
+  update->browser_controls_params.bottom_controls_height = 10.f;
+  update->browser_controls_params.bottom_controls_min_height = 20.f;
+
+  result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid browser controls params");
+}
+
+class LayerContextImplUpdateDisplayTreeInvalidElasticOverscrollTest
+    : public LayerContextImplTest,
+      public ::testing::WithParamInterface<float> {};
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidElasticOverscrollTest,
+       ElasticOverscrollX) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->scroll_tree_update = mojom::ScrollTreeUpdate::New();
+  update->scroll_tree_update->elastic_overscroll[cc::ElementId(123)] =
+      gfx::Vector2dF(invalid_value, 0.f);
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid elastic_overscroll");
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidElasticOverscrollTest,
+       ElasticOverscrollY) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->scroll_tree_update = mojom::ScrollTreeUpdate::New();
+  update->scroll_tree_update->elastic_overscroll[cc::ElementId(123)] =
+      gfx::Vector2dF(0.f, invalid_value);
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid elastic_overscroll");
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    InvalidFloats,
+    LayerContextImplUpdateDisplayTreeInvalidElasticOverscrollTest,
+    ::testing::Values(std::numeric_limits<float>::infinity(),
+                      -std::numeric_limits<float>::infinity(),
+                      std::numeric_limits<float>::quiet_NaN()),
+    [](const testing::TestParamInfo<
+        LayerContextImplUpdateDisplayTreeInvalidElasticOverscrollTest::
+            ParamType>& info) {
+      if (std::isinf(info.param)) {
+        return info.param > 0 ? "Infinity" : "NegativeInfinity";
+      }
+      if (std::isnan(info.param)) {
+        return "NaN";
+      }
+      return "Other";
+    });
+
+class LayerContextImplUpdateDisplayTreeInvalidBackdropFilterQualityTest
+    : public LayerContextImplTest,
+      public ::testing::WithParamInterface<float> {};
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidBackdropFilterQualityTest,
+       BackdropFilterQuality) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->num_effect_nodes = 2;
+  auto effect_node = mojom::EffectNode::New();
+  effect_node->id = 1;
+  effect_node->parent_id = 0;
+  effect_node->transform_id = 0;
+  effect_node->clip_id = 0;
+  effect_node->target_id = 0;
+  effect_node->backdrop_filter_quality = invalid_value;
+  update->effect_nodes.push_back(std::move(effect_node));
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid backdrop_filter_quality");
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    InvalidFloats,
+    LayerContextImplUpdateDisplayTreeInvalidBackdropFilterQualityTest,
+    ::testing::Values(std::numeric_limits<float>::infinity(),
+                      -std::numeric_limits<float>::infinity(),
+                      std::numeric_limits<float>::quiet_NaN(),
+                      0.0f,
+                      -0.1f,  // Less than 0
+                      1.1f),  // Greater than 1
+    [](const testing::TestParamInfo<
+        LayerContextImplUpdateDisplayTreeInvalidBackdropFilterQualityTest::
+            ParamType>& info) {
+      if (std::isinf(info.param)) {
+        return info.param > 0 ? "Infinity" : "NegativeInfinity";
+      }
+      if (std::isnan(info.param)) {
+        return "NaN";
+      }
+      if (info.param == 0.0f) {
+        return "Zero";
+      }
+      if (info.param < 0.0f) {
+        return "Negative";
+      }
+      if (info.param > 1.0f) {
+        return "GreaterThanOne";
+      }
+      return "Other";
+    });
+
+class LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest
+    : public LayerContextImplTest,
+      public ::testing::WithParamInterface<float> {};
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest,
+       PageScaleFactor) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->transform_tree_update = mojom::TransformTreeUpdate::New();
+  update->transform_tree_update->page_scale_factor = invalid_value;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid page_scale_factor");
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest,
+       DeviceScaleFactor) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->transform_tree_update = mojom::TransformTreeUpdate::New();
+  update->transform_tree_update->device_scale_factor = invalid_value;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid device_scale_factor");
+}
+
+TEST_P(LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest,
+       DeviceTransformScaleFactor) {
+  const float invalid_value = GetParam();
+  auto update = CreateDefaultUpdate();
+  update->transform_tree_update = mojom::TransformTreeUpdate::New();
+  update->transform_tree_update->device_transform_scale_factor = invalid_value;
+
+  auto result = layer_context_impl_->DoUpdateDisplayTree(std::move(update));
+  ASSERT_FALSE(result.has_value());
+  EXPECT_EQ(result.error(), "Invalid device_transform_scale_factor");
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    InvalidFloats,
+    LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest,
+    ::testing::Values(std::numeric_limits<float>::infinity(),
+                      -std::numeric_limits<float>::infinity(),
+                      std::numeric_limits<float>::quiet_NaN(),
+                      -1.0f),
+    [](const testing::TestParamInfo<
+        LayerContextImplUpdateDisplayTreeInvalidTransformTreeUpdateTest::
+            ParamType>& info) {
+      if (std::isinf(info.param)) {
+        return info.param > 0 ? "Infinity" : "NegativeInfinity";
+      }
+      if (std::isnan(info.param)) {
+        return "NaN";
+      }
+      if (info.param < 0.0f) {
+        return "Negative";
+      }
+      return "Other";
+    });
+
 }  // namespace
 }  // namespace viz
diff --git a/components/webapps/browser/android/app_banner_manager_android.cc b/components/webapps/browser/android/app_banner_manager_android.cc
index af11e67..edfe206 100644
--- a/components/webapps/browser/android/app_banner_manager_android.cc
+++ b/components/webapps/browser/android/app_banner_manager_android.cc
@@ -480,13 +480,16 @@
           TrackUserResponse(USER_RESPONSE_NATIVE_APP_ACCEPTED);
           break;
         case AddToHomescreenParams::AppType::WEBAPK:
-          [[fallthrough]];
-        case AddToHomescreenParams::AppType::SHORTCUT:
           TrackUserResponse(USER_RESPONSE_WEB_APP_ACCEPTED);
           AppBannerSettingsHelper::RecordBannerInstallEvent(
               web_contents(), a2hs_params.shortcut_info->url.spec());
           break;
         default:
+          // a2hs_params should be the one created by
+          // CreateAddToHomescreenParams(), which only returns
+          // AddToHomescreenParams::AppType::NATIVE or
+          // AddToHomescreenParams::AppType::WEBAPK, so this shouldn't be
+          // reached.
           NOTREACHED();
       }
       break;
@@ -507,8 +510,7 @@
 
     case AddToHomescreenInstaller::Event::INSTALL_REQUEST_FINISHED:
       SendBannerAccepted();
-      if (a2hs_params.app_type == AddToHomescreenParams::AppType::WEBAPK ||
-          a2hs_params.app_type == AddToHomescreenParams::AppType::SHORTCUT) {
+      if (a2hs_params.app_type == AddToHomescreenParams::AppType::WEBAPK) {
         OnInstall(a2hs_params.shortcut_info->display,
                   /*set_current_web_app_not_installable=*/false);
       }
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2Api.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2Api.java
index 58d1820..c1e2ea1 100644
--- a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2Api.java
+++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2Api.java
@@ -1569,6 +1569,9 @@
                     case 6:
                         details.mIsPayment = parcel.readInt() != 0;
                         break;
+                    case 7:
+                        details.mLastUsedTimeMs = parcel.readLong();
+                        break;
                     default:
                         // unknown tag. Skip over it.
                         parcel.setDataPosition(addLengthToParcelPosition(header.second, parcel));
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiTestHelper.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiTestHelper.java
index 50ff6cc2..66b82466 100644
--- a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiTestHelper.java
+++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiTestHelper.java
@@ -789,6 +789,7 @@
         credential.mCredentialId = new byte[] {8, 7, 6};
         credential.mIsDiscoverable = true;
         credential.mIsPayment = false;
+        credential.mLastUsedTimeMs = 42;
         return credential;
     }
 
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnBrowserBridge.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnBrowserBridge.java
index b881c68..cee3287 100644
--- a/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnBrowserBridge.java
+++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnBrowserBridge.java
@@ -251,6 +251,11 @@
     }
 
     @CalledByNative
+    private static long getWebauthnCredentialDetailsLastUsedTimeMs(WebauthnCredentialDetails cred) {
+        return cred.mLastUsedTimeMs;
+    }
+
+    @CalledByNative
     private static SelectedCredential createSelectedPasswordCredential(
             String username, String password) {
         return new SelectedCredential(
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnCredentialDetails.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnCredentialDetails.java
index 93f12c7a..39fb5b8 100644
--- a/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnCredentialDetails.java
+++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/WebauthnCredentialDetails.java
@@ -28,5 +28,8 @@
     /** Whether the credential is enabled for Secure Payment Confirmation. */
     public boolean mIsPayment;
 
+    /** Last used time in UNIX epoch milliseconds. */
+    public long mLastUsedTimeMs;
+
     public WebauthnCredentialDetails() {}
 }
diff --git a/components/webauthn/android/webauthn_browser_bridge.cc b/components/webauthn/android/webauthn_browser_bridge.cc
index 8abd2cf..58a8a800 100644
--- a/components/webauthn/android/webauthn_browser_bridge.cc
+++ b/components/webauthn/android/webauthn_browser_bridge.cc
@@ -20,6 +20,7 @@
 #include "base/check_op.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
+#include "base/time/time.h"
 #include "components/webauthn/android/webauthn_client_android.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
@@ -58,6 +59,13 @@
       env,
       Java_WebauthnBrowserBridge_getWebauthnCredentialDetailsUserDisplayName(
           env, j_credential));
+  int64_t last_used_time_ms =
+      Java_WebauthnBrowserBridge_getWebauthnCredentialDetailsLastUsedTimeMs(
+          env, j_credential);
+  if (last_used_time_ms != 0) {
+    credential.last_used_time =
+        base::Time::FromMillisecondsSinceUnixEpoch(last_used_time_ms);
+  }
   return credential;
 }
 
diff --git a/components/webauthn/ios/BUILD.gn b/components/webauthn/ios/BUILD.gn
index 4d234163..8b953a3 100644
--- a/components/webauthn/ios/BUILD.gn
+++ b/components/webauthn/ios/BUILD.gn
@@ -7,6 +7,10 @@
 source_set("ios") {
   sources = [
     "ios_passkey_client.h",
+    "ios_webauthn_credentials_delegate.h",
+    "ios_webauthn_credentials_delegate.mm",
+    "ios_webauthn_credentials_delegate_factory.h",
+    "ios_webauthn_credentials_delegate_factory.mm",
     "passkey_java_script_feature.h",
     "passkey_java_script_feature.mm",
     "passkey_tab_helper.h",
@@ -18,6 +22,9 @@
     ":passkey_controller_js",
     ":passkey_types",
     "//base",
+    "//components/autofill/ios/browser",
+    "//components/password_manager/core/browser",
+    "//components/password_manager/core/browser:passkey_credential",
     "//components/webauthn/core/browser:client_data",
     "//components/webauthn/core/browser:passkey_model",
     "//device/fido",
@@ -57,11 +64,15 @@
 
 source_set("unit_tests") {
   testonly = true
-  sources = [ "passkey_tab_helper_unittest.mm" ]
+  sources = [
+    "ios_webauthn_credentials_delegate_factory_unittest.mm",
+    "passkey_tab_helper_unittest.mm",
+  ]
   deps = [
     ":ios",
     ":js_tests",
     "//base/test:test_support",
+    "//components/autofill/ios/browser",
     "//components/webauthn/core/browser:passkey_model",
     "//components/webauthn/core/browser:test_support",
     "//ios/web/public/test",
diff --git a/components/webauthn/ios/DEPS b/components/webauthn/ios/DEPS
index 92ecbeb..9896ad5 100644
--- a/components/webauthn/ios/DEPS
+++ b/components/webauthn/ios/DEPS
@@ -1,4 +1,6 @@
 include_rules = [
   "+ios/web/public",
   "+net/test/embedded_test_server",
+  "+components/autofill/ios/browser",
+  "+components/password_manager/core/browser",
 ]
diff --git a/components/webauthn/ios/ios_webauthn_credentials_delegate.h b/components/webauthn/ios/ios_webauthn_credentials_delegate.h
new file mode 100644
index 0000000..3f1116249
--- /dev/null
+++ b/components/webauthn/ios/ios_webauthn_credentials_delegate.h
@@ -0,0 +1,37 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_H_
+#define COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_H_
+
+#import "base/memory/weak_ptr.h"
+#import "components/password_manager/core/browser/passkey_credential.h"
+#import "components/password_manager/core/browser/webauthn_credentials_delegate.h"
+
+// iOS implementation of WebAuthnCredentialsDelegate.
+class IOSWebAuthnCredentialsDelegate
+    : public password_manager::WebAuthnCredentialsDelegate {
+ public:
+  explicit IOSWebAuthnCredentialsDelegate();
+  ~IOSWebAuthnCredentialsDelegate() override;
+
+  // password_manager::WebAuthnCredentialsDelegate:
+  void LaunchSecurityKeyOrHybridFlow() override;
+  void SelectPasskey(const std::string& backend_id,
+                     OnPasskeySelectedCallback callback) override;
+  base::expected<const std::vector<password_manager::PasskeyCredential>*,
+                 PasskeysUnavailableReason>
+  GetPasskeys() const override;
+  void NotifyForPasskeysDisplay() override;
+  bool IsSecurityKeyOrHybridFlowAvailable() const override;
+  void RequestNotificationWhenPasskeysReady(
+      base::OnceCallback<void()> callback) override;
+  bool HasPendingPasskeySelection() override;
+  base::WeakPtr<WebAuthnCredentialsDelegate> AsWeakPtr() override;
+
+ private:
+  base::WeakPtrFactory<IOSWebAuthnCredentialsDelegate> weak_ptr_factory_{this};
+};
+
+#endif  // COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_H_
diff --git a/components/webauthn/ios/ios_webauthn_credentials_delegate.mm b/components/webauthn/ios/ios_webauthn_credentials_delegate.mm
new file mode 100644
index 0000000..a0993f5
--- /dev/null
+++ b/components/webauthn/ios/ios_webauthn_credentials_delegate.mm
@@ -0,0 +1,62 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "components/webauthn/ios/ios_webauthn_credentials_delegate.h"
+
+#import "base/notimplemented.h"
+
+IOSWebAuthnCredentialsDelegate::IOSWebAuthnCredentialsDelegate() {}
+
+IOSWebAuthnCredentialsDelegate::~IOSWebAuthnCredentialsDelegate() = default;
+
+void IOSWebAuthnCredentialsDelegate::LaunchSecurityKeyOrHybridFlow() {
+  // TODO(crbug.com/459451476): Implement.
+  NOTIMPLEMENTED();
+}
+
+void IOSWebAuthnCredentialsDelegate::SelectPasskey(
+    const std::string& backend_id,
+    OnPasskeySelectedCallback callback) {
+  // TODO(crbug.com/459451476): Implement.
+  NOTIMPLEMENTED();
+}
+
+base::expected<
+    const std::vector<password_manager::PasskeyCredential>*,
+    password_manager::WebAuthnCredentialsDelegate::PasskeysUnavailableReason>
+IOSWebAuthnCredentialsDelegate::GetPasskeys() const {
+  // TODO(crbug.com/459451476): Implement.
+  NOTIMPLEMENTED();
+  return base::unexpected(
+      IOSWebAuthnCredentialsDelegate::PasskeysUnavailableReason::kNotReceived);
+}
+
+void IOSWebAuthnCredentialsDelegate::NotifyForPasskeysDisplay() {
+  // TODO(crbug.com/459451476): Implement.
+  NOTIMPLEMENTED();
+}
+
+bool IOSWebAuthnCredentialsDelegate::IsSecurityKeyOrHybridFlowAvailable()
+    const {
+  // TODO(crbug.com/459451476): Implement.
+  NOTIMPLEMENTED();
+  return false;
+}
+
+void IOSWebAuthnCredentialsDelegate::RequestNotificationWhenPasskeysReady(
+    base::OnceCallback<void()> callback) {
+  // TODO(crbug.com/459451476): Implement.
+  NOTIMPLEMENTED();
+}
+
+bool IOSWebAuthnCredentialsDelegate::HasPendingPasskeySelection() {
+  // TODO(crbug.com/459451476): Implement.
+  NOTIMPLEMENTED();
+  return false;
+}
+
+base::WeakPtr<password_manager::WebAuthnCredentialsDelegate>
+IOSWebAuthnCredentialsDelegate::AsWeakPtr() {
+  return weak_ptr_factory_.GetWeakPtr();
+}
diff --git a/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h
new file mode 100644
index 0000000..89a7599
--- /dev/null
+++ b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h
@@ -0,0 +1,57 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_FACTORY_H_
+#define COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_FACTORY_H_
+
+#import "base/memory/raw_ptr.h"
+#import "components/webauthn/ios/ios_webauthn_credentials_delegate.h"
+#import "ios/web/public/js_messaging/web_frames_manager.h"
+#import "ios/web/public/web_state_user_data.h"
+
+namespace web {
+class WebState;
+}  // namespace web
+
+// This factory creates and manages the lifecycle of
+// IOSWebAuthnCredentialsDelegate objects. There is one factory per WebState,
+// and it creates one delegate per WebFrame.
+class IOSWebAuthnCredentialsDelegateFactory
+    : public web::WebFramesManager::Observer,
+      public web::WebStateUserData<IOSWebAuthnCredentialsDelegateFactory> {
+ public:
+  ~IOSWebAuthnCredentialsDelegateFactory() override;
+
+  IOSWebAuthnCredentialsDelegateFactory(
+      const IOSWebAuthnCredentialsDelegateFactory&) = delete;
+  IOSWebAuthnCredentialsDelegateFactory& operator=(
+      const IOSWebAuthnCredentialsDelegateFactory&) = delete;
+
+  // Returns the factory for the given `web_state`, creating one if it doesn't
+  // already exist.
+  static IOSWebAuthnCredentialsDelegateFactory* GetFactory(
+      web::WebState* web_state);
+
+  // Returns the delegate for the given `frame`, creating one if it doesn't
+  // already exist.
+  IOSWebAuthnCredentialsDelegate* GetDelegateForFrame(
+      const std::string& frame_id);
+
+ private:
+  friend class web::WebStateUserData<IOSWebAuthnCredentialsDelegateFactory>;
+
+  explicit IOSWebAuthnCredentialsDelegateFactory(web::WebState* web_state);
+
+  // web::WebFramesManager::Observer:
+  void WebFrameBecameUnavailable(web::WebFramesManager* web_frames_manager,
+                                 const std::string& frame_id) override;
+
+  // Maps a frame ID to an IOSWebAuthnCredentialsDelegate.
+  base::flat_map<std::string, std::unique_ptr<IOSWebAuthnCredentialsDelegate>>
+      delegate_map_;
+
+  raw_ptr<web::WebState> web_state_;
+};
+
+#endif  // COMPONENTS_WEBAUTHN_IOS_IOS_WEBAUTHN_CREDENTIALS_DELEGATE_FACTORY_H_
diff --git a/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.mm b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.mm
new file mode 100644
index 0000000..b9c1ded
--- /dev/null
+++ b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory.mm
@@ -0,0 +1,52 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h"
+
+#import <memory>
+
+#import "base/containers/flat_map.h"
+#import "components/autofill/ios/browser/autofill_java_script_feature.h"
+#import "ios/web/public/web_state.h"
+
+IOSWebAuthnCredentialsDelegateFactory::IOSWebAuthnCredentialsDelegateFactory(
+    web::WebState* web_state)
+    : web_state_(web_state) {
+  autofill::AutofillJavaScriptFeature::GetInstance()
+      ->GetWebFramesManager(web_state_)
+      ->AddObserver(this);
+}
+
+IOSWebAuthnCredentialsDelegateFactory::
+    ~IOSWebAuthnCredentialsDelegateFactory() {
+  autofill::AutofillJavaScriptFeature::GetInstance()
+      ->GetWebFramesManager(web_state_)
+      ->RemoveObserver(this);
+}
+
+// static
+IOSWebAuthnCredentialsDelegateFactory*
+IOSWebAuthnCredentialsDelegateFactory::GetFactory(web::WebState* web_state) {
+  // This does nothing if it already exists.
+  CreateForWebState(web_state);
+  return FromWebState(web_state);
+}
+
+IOSWebAuthnCredentialsDelegate*
+IOSWebAuthnCredentialsDelegateFactory::GetDelegateForFrame(
+    const std::string& frame_id) {
+  auto it = delegate_map_.find(frame_id);
+  if (it == delegate_map_.end()) {
+    auto [new_it, inserted] = delegate_map_.try_emplace(
+        frame_id, std::make_unique<IOSWebAuthnCredentialsDelegate>());
+    it = new_it;
+  }
+  return it->second.get();
+}
+
+void IOSWebAuthnCredentialsDelegateFactory::WebFrameBecameUnavailable(
+    web::WebFramesManager* web_frames_manager,
+    const std::string& frame_id) {
+  delegate_map_.erase(frame_id);
+}
diff --git a/components/webauthn/ios/ios_webauthn_credentials_delegate_factory_unittest.mm b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory_unittest.mm
new file mode 100644
index 0000000..755a964
--- /dev/null
+++ b/components/webauthn/ios/ios_webauthn_credentials_delegate_factory_unittest.mm
@@ -0,0 +1,105 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h"
+
+#import "components/autofill/ios/browser/autofill_java_script_feature.h"
+#import "ios/web/public/js_messaging/content_world.h"
+#import "ios/web/public/test/fakes/fake_web_frame.h"
+#import "ios/web/public/test/fakes/fake_web_frames_manager.h"
+#import "ios/web/public/test/fakes/fake_web_state.h"
+#import "ios/web/public/test/web_task_environment.h"
+#import "testing/platform_test.h"
+
+namespace {
+
+constexpr std::string kFrameId1 = "frame1";
+constexpr std::string kFrameId2 = "frame2";
+
+}  // namespace
+
+class IOSWebAuthnCredentialsDelegateFactoryTest : public PlatformTest {
+ protected:
+  void SetUp() override {
+    web_state_.SetWebFramesManager(
+        content_world(), std::make_unique<web::FakeWebFramesManager>());
+
+    factory_ = IOSWebAuthnCredentialsDelegateFactory::GetFactory(&web_state_);
+    ASSERT_TRUE(factory_);
+  }
+
+  web::FakeWebFramesManager* web_frames_manager() {
+    return static_cast<web::FakeWebFramesManager*>(
+        web_state_.GetWebFramesManager(content_world()));
+  }
+
+  IOSWebAuthnCredentialsDelegateFactory* factory() { return factory_; }
+
+  web::ContentWorld content_world() {
+    return autofill::AutofillJavaScriptFeature::GetInstance()
+        ->GetSupportedContentWorld();
+  }
+
+ private:
+  web::WebTaskEnvironment task_environment_;
+  web::FakeWebState web_state_;
+  raw_ptr<IOSWebAuthnCredentialsDelegateFactory> factory_;
+};
+
+// Tests that the factory creates a delegate for a given frame.
+TEST_F(IOSWebAuthnCredentialsDelegateFactoryTest, FactoryCreatesDelegate) {
+  IOSWebAuthnCredentialsDelegate* delegate =
+      factory()->GetDelegateForFrame(kFrameId1);
+
+  EXPECT_TRUE(delegate);
+}
+
+// Tests that the factory returns the same delegate for the same frame.
+TEST_F(IOSWebAuthnCredentialsDelegateFactoryTest, SameDelegateForSameFrame) {
+  IOSWebAuthnCredentialsDelegate* delegate1 =
+      factory()->GetDelegateForFrame(kFrameId1);
+
+  IOSWebAuthnCredentialsDelegate* delegate2 =
+      factory()->GetDelegateForFrame(kFrameId1);
+
+  EXPECT_EQ(delegate1, delegate2);
+}
+
+// Tests that the factory returns different delegates for different frames.
+TEST_F(IOSWebAuthnCredentialsDelegateFactoryTest,
+       DifferentDelegateForDifferentFrame) {
+  IOSWebAuthnCredentialsDelegate* delegate1 =
+      factory()->GetDelegateForFrame(kFrameId1);
+
+  IOSWebAuthnCredentialsDelegate* delegate2 =
+      factory()->GetDelegateForFrame(kFrameId2);
+
+  EXPECT_NE(delegate1, delegate2);
+}
+
+// Tests that the delegate is destroyed when the associated frame is removed.
+TEST_F(IOSWebAuthnCredentialsDelegateFactoryTest, DelegateDestroyedWithFrame) {
+  auto fake_frame = web::FakeWebFrame::Create(kFrameId1, /*is_main_frame=*/true,
+                                              GURL::EmptyGURL());
+  web_frames_manager()->AddWebFrame(std::move(fake_frame));
+
+  // Getting the delegate should create it.
+  IOSWebAuthnCredentialsDelegate* old_delegate =
+      factory()->GetDelegateForFrame(kFrameId1);
+  EXPECT_TRUE(old_delegate);
+
+  // Removing the frame should destroy the delegate.
+  web_frames_manager()->RemoveWebFrame(kFrameId1);
+
+  // Create another delegate for a different frame to make it less likely
+  // that the memory address of `old_delegate` is reused.
+  factory()->GetDelegateForFrame(kFrameId2);
+
+  // Getting the delegate again for the frame with ID `kFrameId1` should create
+  // a new one.
+  IOSWebAuthnCredentialsDelegate* new_delegate =
+      factory()->GetDelegateForFrame(kFrameId1);
+  EXPECT_TRUE(new_delegate);
+  EXPECT_NE(old_delegate, new_delegate);
+}
diff --git a/components/webrtc_logging/logging_unittest.cc b/components/webrtc_logging/logging_unittest.cc
index 731a0d2..e9c02d04 100644
--- a/components/webrtc_logging/logging_unittest.cc
+++ b/components/webrtc_logging/logging_unittest.cc
@@ -11,8 +11,10 @@
 // since webrtc's logging.h file may conflict with chromium.
 
 #include "base/logging.h"
+
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/logging/logging_settings.h"
 #include "build/build_config.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/wifi/wifi_test.cc b/components/wifi/wifi_test.cc
index 2fa856e0..019f534 100644
--- a/components/wifi/wifi_test.cc
+++ b/components/wifi/wifi_test.cc
@@ -13,6 +13,7 @@
 #include "base/command_line.h"
 #include "base/functional/bind.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/components/zucchini/zucchini_main.cc b/components/zucchini/zucchini_main.cc
index 6b38153..c67a36e5 100644
--- a/components/zucchini/zucchini_main.cc
+++ b/components/zucchini/zucchini_main.cc
@@ -6,6 +6,7 @@
 
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/process/memory.h"
 #include "build/build_config.h"
 #include "components/zucchini/main_utils.h"
diff --git a/content/app/android/library_loader_hooks.cc b/content/app/android/library_loader_hooks.cc
index ddd53600..b095299 100644
--- a/content/app/android/library_loader_hooks.cc
+++ b/content/app/android/library_loader_hooks.cc
@@ -6,6 +6,7 @@
 
 #include "base/i18n/icu_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/process/current_process.h"
 #include "base/trace_event/trace_event.h"
 #include "content/common/content_constants_internal.h"
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc
index 8452292..0cb600c 100644
--- a/content/browser/accessibility/browser_accessibility_android.cc
+++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -292,7 +292,12 @@
   // a click listener is present in its ancestry chain.
   if (HasIntAttribute(ax::mojom::IntAttribute::kDefaultActionVerb) &&
       (GetData().GetDefaultActionVerb() !=
-       ax::mojom::DefaultActionVerb::kClickAncestor)) {
+       ax::mojom::DefaultActionVerb::kClickAncestor) &&
+      (!base::FeatureList::IsEnabled(
+          features::kAccessibilityRequestLayoutBasedActions) ||
+      GetData().GetDefaultActionVerb() !=
+       ax::mojom::DefaultActionVerb::kClickNotInHitTest)
+      ) {
     return true;
   }
 
@@ -2306,6 +2311,15 @@
   return false;
 }
 
+bool BrowserAccessibilityAndroid::HasLayoutBasedActions() const {
+  const auto default_action_verb = GetData().GetDefaultActionVerb();
+  return default_action_verb ==
+    ax::mojom::DefaultActionVerb::kClickInHitTest ||
+          default_action_verb ==
+            ax::mojom::DefaultActionVerb::kClickNotInHitTest;
+}
+
+
 bool BrowserAccessibilityAndroid::HasImage() const {
   if (ui::IsImageOrVideo(GetRole())) {
     return true;
diff --git a/content/browser/accessibility/browser_accessibility_android.h b/content/browser/accessibility/browser_accessibility_android.h
index 29daeb7..e9ba885 100644
--- a/content/browser/accessibility/browser_accessibility_android.h
+++ b/content/browser/accessibility/browser_accessibility_android.h
@@ -113,6 +113,7 @@
 
   bool HasCharacterLocations() const;
   bool HasImage() const;
+  bool HasLayoutBasedActions() const;
 
   const char* GetClassName() const;
   bool IsChildOfLeaf() const override;
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc
index cc82751..fee931c 100644
--- a/content/browser/accessibility/browser_accessibility_manager_android.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_android.cc
@@ -284,6 +284,9 @@
             ANDROID_ACCESSIBILITY_EVENT_CONTENT_CHANGE_TYPE_STATE_DESCRIPTION);
       }
       break;
+    case ui::AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED:
+      wcax->HandleDefaultActionVerbChanged(android_node->GetUniqueId());
+      break;
     case ui::AXEventGenerator::Event::DESCRIPTION_CHANGED: {
       wcax->HandleWindowContentChange(
           android_node->GetUniqueId(),
diff --git a/content/browser/accessibility/web_contents_accessibility_android.cc b/content/browser/accessibility/web_contents_accessibility_android.cc
index ad44d5d..cce49a3 100644
--- a/content/browser/accessibility/web_contents_accessibility_android.cc
+++ b/content/browser/accessibility/web_contents_accessibility_android.cc
@@ -925,6 +925,18 @@
                                                                 unique_id);
 }
 
+void WebContentsAccessibilityAndroid::HandleDefaultActionVerbChanged(
+    int32_t unique_id) {
+  JNIEnv* env = AttachCurrentThread();
+  ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+  if (obj.is_null()) {
+    return;
+  }
+
+  Java_WebContentsAccessibilityImpl_handleDefaultActionVerbChanged(env, obj,
+                                                                    unique_id);
+}
+
 void WebContentsAccessibilityAndroid::AnnounceLiveRegionText(
     const std::u16string& text) {
   CHECK(!base::FeatureList::IsEnabled(
@@ -1330,7 +1342,8 @@
       node->IsFocusable(), node->IsFocused(), node->HasImage(),
       node->IsPasswordField(), node->IsScrollable(), node->IsSelected(),
       node->IsVisibleToUser(), node->HasCharacterLocations(),
-      node->IsRequired(), node->IsHeading() || node->IsTableHeader());
+      node->IsRequired(), node->IsHeading() || node->IsTableHeader(),
+      node->HasLayoutBasedActions());
 }
 
 void WebContentsAccessibilityAndroid::
@@ -2396,6 +2409,21 @@
   return static_cast<jint>(node->GetPaintOrder());
 }
 
+void WebContentsAccessibilityAndroid::RequestLayoutBasedActions(
+    JNIEnv* env,
+    jint unique_id,
+    const JavaParamRef<jobject>& info) {
+  ui::BrowserAccessibility* node = GetAXFromUniqueID(unique_id);
+  if (!node) {
+    return;
+  }
+
+  ui::AXActionData action_data;
+  action_data.action = ax::mojom::Action::kRequestLayoutBasedAction;
+  action_data.target_node_id = node->GetId();
+  node->AccessibilityPerformAction(action_data);
+}
+
 BrowserAccessibilityManagerAndroid*
 WebContentsAccessibilityAndroid::GetRootBrowserAccessibilityManager() const {
   if (snapshot_root_manager_) {
diff --git a/content/browser/accessibility/web_contents_accessibility_android.h b/content/browser/accessibility/web_contents_accessibility_android.h
index 81a6957a..f08e8737 100644
--- a/content/browser/accessibility/web_contents_accessibility_android.h
+++ b/content/browser/accessibility/web_contents_accessibility_android.h
@@ -304,6 +304,12 @@
   // Get the paint order for a given node.
   jint GetPaintOrder(JNIEnv* env, jint unique_id);
 
+  // Request layout based actions for a given node.
+  void RequestLayoutBasedActions(
+      JNIEnv* env,
+      jint unique_id,
+      const base::android::JavaParamRef<jobject>& info);
+
   void UpdateFrameInfo(float page_scale);
 
   // Set a new max for TYPE_WINDOW_CONTENT_CHANGED events to fire.
@@ -402,6 +408,7 @@
   void HandlePaneOpened(int32_t unique_id);
   // Dispatches LIVE_REGION_NODE_CHANGED AxGeneratedEvents over the JNI Bridge.
   void HandleLiveRegionNodeChanged(int32_t unique_id);
+  void HandleDefaultActionVerbChanged(int32_t unique_id);
   void AnnounceLiveRegionText(const std::u16string& text);
   void HandleActiveDescendantChanged(int32_t unique_id);
   void HandleTextSelectionChanged(int32_t unique_id);
diff --git a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc
index 529ee8c..da2c6e1 100644
--- a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc
+++ b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 #include <optional>
+#include <string>
 #include <utility>
 #include <vector>
 
@@ -149,7 +150,7 @@
     UrlLoaderList::iterator it,
     const GURL& url,
     NetworkFetchCallback callback,
-    std::unique_ptr<std::string> response_body) {
+    std::optional<std::string> response_body) {
   std::unique_ptr<network::SimpleURLLoader> loader = std::move(*it);
   loaders_in_progress_.erase(it);
 
diff --git a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.h b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.h
index c834a0cc..3383205 100644
--- a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.h
+++ b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.h
@@ -7,6 +7,8 @@
 
 #include <list>
 #include <memory>
+#include <optional>
+#include <string>
 #include <string_view>
 
 #include "base/memory/raw_ptr.h"
@@ -90,7 +92,7 @@
   void OnSimpleLoaderComplete(UrlLoaderList::iterator it,
                               const GURL& url,
                               NetworkFetchCallback callback,
-                              std::unique_ptr<std::string> response_body);
+                              std::optional<std::string> response_body);
 
   // Callback for DataDecoder. `expiry_time` will be null if the freshness
   // lifetime is zero.
diff --git a/content/browser/android/content_feature_map.cc b/content/browser/android/content_feature_map.cc
index c024df3..ff8ee32b 100644
--- a/content/browser/android/content_feature_map.cc
+++ b/content/browser/android/content_feature_map.cc
@@ -35,6 +35,7 @@
     &features::kAccessibilityDeprecateJavaNodeCache,
     &features::kAccessibilityDeprecateTypeAnnounce,
     &features::kAccessibilityImproveLiveRegionAnnounce,
+    &features::kAccessibilityRequestLayoutBasedActions,
     &features::kAccessibilityPageZoomV2,
     &features::kAccessibilityPopulateSupplementalDescriptionApi,
     &features::kAccessibilitySetSelectableOnAllNodesWithText,
diff --git a/content/browser/attribution_reporting/attribution_resolver_impl.cc b/content/browser/attribution_reporting/attribution_resolver_impl.cc
index e3ce317..b435e02 100644
--- a/content/browser/attribution_reporting/attribution_resolver_impl.cc
+++ b/content/browser/attribution_reporting/attribution_resolver_impl.cc
@@ -494,12 +494,6 @@
     return make_result(StoreSourceResult::InternalError());
   }
 
-  static_assert(AttributionStorageSql::kCurrentVersionNumber < 86);
-  base::UmaHistogramCustomCounts("Conversions.DbVersionOnSourceStored",
-                                 AttributionStorageSql::kCurrentVersionNumber,
-                                 /*min=*/56,
-                                 /*exclusive_max=*/86, /*buckets=*/30);
-
   return make_result(StoreSourceResult::Success(min_fake_report_time,
                                                 stored_source->source_id()));
 }
diff --git a/content/browser/attribution_reporting/attribution_resolver_unittest.cc b/content/browser/attribution_reporting/attribution_resolver_unittest.cc
index 8eb7ee6c..fddd119 100644
--- a/content/browser/attribution_reporting/attribution_resolver_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_resolver_unittest.cc
@@ -232,10 +232,7 @@
 };
 
 TEST_F(AttributionResolverTest, ImpressionStoredAndRetrieved_ValuesIdentical) {
-  base::HistogramTester histograms;
   storage()->StoreSource(SourceBuilder().Build());
-  histograms.ExpectBucketCount("Conversions.DbVersionOnSourceStored",
-                               AttributionStorageSql::kCurrentVersionNumber, 1);
   EXPECT_THAT(storage()->GetActiveSources(),
               ElementsAre(SourceBuilder().BuildStored()));
 }
@@ -477,8 +474,6 @@
 }
 
 TEST_F(AttributionResolverTest, ConversionReportDeleted_RemovedFromStorage) {
-  base::HistogramTester histograms;
-
   storage()->StoreSource(SourceBuilder().Build());
   EXPECT_EQ(AttributionTrigger::EventLevelResult::kSuccess,
             MaybeCreateAndStoreEventLevelReport(DefaultTrigger()));
@@ -489,7 +484,6 @@
   DeleteReports(reports);
 
   EXPECT_THAT(storage()->GetAttributionReports(base::Time::Max()), IsEmpty());
-  histograms.ExpectTotalCount("Conversions.DbVersionOnReportSentAndDeleted", 1);
 }
 
 TEST_F(AttributionResolverTest,
diff --git a/content/browser/attribution_reporting/attribution_storage_sql.cc b/content/browser/attribution_reporting/attribution_storage_sql.cc
index 5bbaf2b..7f20580 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql.cc
@@ -1516,14 +1516,7 @@
     return true;
   }
 
-  bool success = DeleteReportInternal(report_id);
-  if (success) {
-    base::UmaHistogramCustomCounts(
-        "Conversions.DbVersionOnReportSentAndDeleted", kCurrentVersionNumber,
-        /*min=*/58,
-        /*exclusive_max=*/88, /*buckets=*/30);
-  }
-  return success;
+  return DeleteReportInternal(report_id);
 }
 
 bool AttributionStorageSql::DeleteReportInternal(
diff --git a/content/browser/file_system_access/file_system_access_safe_move_helper.cc b/content/browser/file_system_access/file_system_access_safe_move_helper.cc
index 4b5f086..000b82c0 100644
--- a/content/browser/file_system_access/file_system_access_safe_move_helper.cc
+++ b/content/browser/file_system_access/file_system_access_safe_move_helper.cc
@@ -117,7 +117,7 @@
 
     // checked_cast<size_t> is safe here: bytes_read < 0 and bytes_read == 0 are
     // both handled above by code paths that return.
-    hash_.Update(buffer_->span().first(base::checked_cast<size_t>(bytes_read)));
+    hash_.Update(buffer_->first(base::checked_cast<size_t>(bytes_read)));
     ReadMore();
   }
 
diff --git a/content/browser/interest_group/bidding_and_auction_server_key_fetcher.cc b/content/browser/interest_group/bidding_and_auction_server_key_fetcher.cc
index 84006336..51dee12 100644
--- a/content/browser/interest_group/bidding_and_auction_server_key_fetcher.cc
+++ b/content/browser/interest_group/bidding_and_auction_server_key_fetcher.cc
@@ -4,6 +4,9 @@
 
 #include "content/browser/interest_group/bidding_and_auction_server_key_fetcher.h"
 
+#include <optional>
+#include <string>
+
 #include "base/base64.h"
 #include "base/functional/callback_helpers.h"
 #include "base/json/json_reader.h"
@@ -466,7 +469,7 @@
   // Pretend we succeeded in loading from network.
   OnFetchKeysFromNetworkComplete(
       std::move(coordinator),
-      std::make_unique<std::string>(std::move(serialized_keys)));
+      std::make_optional<std::string>(std::move(serialized_keys)));
 }
 
 void BiddingAndAuctionServerKeyFetcher::FetchKeys(
@@ -547,7 +550,7 @@
 
 void BiddingAndAuctionServerKeyFetcher::OnFetchKeysFromNetworkComplete(
     url::Origin coordinator,
-    std::unique_ptr<std::string> response) {
+    std::optional<std::string> response) {
   PerCoordinatorFetcherState& state = fetcher_state_map_.at(coordinator);
   bool was_cached = !state.debug_override && state.loader->LoadedFromCache();
   state.loader.reset();
diff --git a/content/browser/interest_group/bidding_and_auction_server_key_fetcher.h b/content/browser/interest_group/bidding_and_auction_server_key_fetcher.h
index 54813ff..d1c6bd4 100644
--- a/content/browser/interest_group/bidding_and_auction_server_key_fetcher.h
+++ b/content/browser/interest_group/bidding_and_auction_server_key_fetcher.h
@@ -202,7 +202,7 @@
   // Called when the JSON blob containing the keys have been successfully
   // fetched over the network.
   void OnFetchKeysFromNetworkComplete(url::Origin coordinator,
-                                      std::unique_ptr<std::string> response);
+                                      std::optional<std::string> response);
 
   // Called when the JSON blob containing the keys has be parsed into
   // base::Values. Uses the parsed result to add keys to the cache and calls
diff --git a/content/browser/interest_group/interest_group_permissions_checker.cc b/content/browser/interest_group/interest_group_permissions_checker.cc
index 7f240a0..1579fd6 100644
--- a/content/browser/interest_group/interest_group_permissions_checker.cc
+++ b/content/browser/interest_group/interest_group_permissions_checker.cc
@@ -4,6 +4,9 @@
 
 #include "content/browser/interest_group/interest_group_permissions_checker.h"
 
+#include <optional>
+#include <string>
+
 #include "base/functional/callback.h"
 #include "base/strings/escape.h"
 #include "base/strings/strcat.h"
@@ -167,7 +170,7 @@
 
 void InterestGroupPermissionsChecker::OnRequestComplete(
     ActiveRequestMap::iterator active_request,
-    std::unique_ptr<std::string> response_body) {
+    std::optional<std::string> response_body) {
   const auto* response_info =
       active_request->second->simple_url_loader->ResponseInfo();
   if (!response_body || !response_info ||
diff --git a/content/browser/interest_group/interest_group_permissions_checker.h b/content/browser/interest_group/interest_group_permissions_checker.h
index f69f4424..3fff19b 100644
--- a/content/browser/interest_group/interest_group_permissions_checker.h
+++ b/content/browser/interest_group/interest_group_permissions_checker.h
@@ -5,17 +5,18 @@
 #ifndef CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_PERMISSIONS_CHECKER_H_
 #define CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_PERMISSIONS_CHECKER_H_
 
-#include "content/common/content_export.h"
-
 #include <list>
 #include <map>
 #include <memory>
+#include <optional>
+#include <string>
 #include <tuple>
 
 #include "base/functional/callback_forward.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
 #include "content/browser/interest_group/interest_group_permissions_cache.h"
+#include "content/common/content_export.h"
 #include "net/base/network_isolation_key.h"
 #include "services/data_decoder/public/cpp/data_decoder.h"
 #include "services/network/public/mojom/url_loader_factory.mojom.h"
@@ -143,7 +144,7 @@
 
   // Invoked with the result of the ".well-known" fetch for `active_request`.
   void OnRequestComplete(ActiveRequestMap::iterator active_request,
-                         std::unique_ptr<std::string> response_body);
+                         std::optional<std::string> response_body);
 
   // Invoked with the result of parsing the response body associated with
   // `active_request` as JSON.
diff --git a/content/browser/interest_group/interest_group_update_manager.cc b/content/browser/interest_group/interest_group_update_manager.cc
index aa93392..0d80226 100644
--- a/content/browser/interest_group/interest_group_update_manager.cc
+++ b/content/browser/interest_group/interest_group_update_manager.cc
@@ -1238,7 +1238,7 @@
     UrlLoadersList::iterator simple_url_loader_it,
     blink::InterestGroupKey group_key,
     base::TimeTicks start_time,
-    std::unique_ptr<std::string> fetch_body) {
+    std::optional<std::string> fetch_body) {
   DCHECK_EQ(group_key.owner, owners_to_update_.FrontOwner());
   DCHECK_GT(num_in_flight_updates_, 0);
   DCHECK(!waiting_on_db_read_);
diff --git a/content/browser/interest_group/interest_group_update_manager.h b/content/browser/interest_group/interest_group_update_manager.h
index c30856a..3c8dd659 100644
--- a/content/browser/interest_group/interest_group_update_manager.h
+++ b/content/browser/interest_group/interest_group_update_manager.h
@@ -11,6 +11,7 @@
 #include <map>
 #include <memory>
 #include <optional>
+#include <string>
 
 #include "base/containers/circular_deque.h"
 #include "base/containers/flat_map.h"
@@ -218,7 +219,7 @@
       UrlLoadersList::iterator simple_url_loader,
       blink::InterestGroupKey group_key,
       base::TimeTicks start_time,
-      std::unique_ptr<std::string> fetch_body);
+      std::optional<std::string> fetch_body);
   void DidUpdateInterestGroupsOfOwnerJsonParse(
       blink::InterestGroupKey group_key,
       data_decoder::DataDecoder::ValueOrError result);
diff --git a/content/browser/resources/media/media_internals.css b/content/browser/resources/media/media_internals.css
index 5574e2d..19f26df4 100644
--- a/content/browser/resources/media/media_internals.css
+++ b/content/browser/resources/media/media_internals.css
@@ -182,8 +182,13 @@
 }
 
 #player-property-table th:first-child,
-#player-property-table td:first-child {
-  width: 250px;
+#player-property-table td:first-child,
+#log th:nth-child(2),
+#log td:nth-child(2) {
+  width: 80px;
+  max-width: 130px;
+  word-wrap: unset;
+  overflow: hidden;
 }
 
 ul {
@@ -370,8 +375,14 @@
 
 #player-actions {
   display: flex;
+  flex-wrap: wrap;
   gap: 10px;
-  flex-shrink: 0;
+  align-items: center;
+}
+
+.action-buttons {
+  display: flex;
+  gap: 10px;
 }
 
 #player-details-content {
@@ -486,12 +497,28 @@
   }
 
   #player-details-header {
-    flex-wrap: wrap;
-    gap: 10px;
+    flex-direction: column;
+    align-items: stretch;
   }
 
   #player-actions {
-    flex-wrap: wrap;
+    width: 100%;
+    gap: 10px;
+  }
+
+  #filter-text {
+    width: min(200px, 90%);
+    order: 2;
+  }
+
+  .action-buttons {
+    display: flex;
+    order: 1;
+    gap: 5px;
+  }
+
+  .action-buttons button {
+    padding: 8px 6px;
   }
 
   .mobile-player-view-active #left-pane,
@@ -507,6 +534,7 @@
     height: 100%;
     z-index: 2;
     background-color: var(--background-color);
+    box-sizing: border-box;
   }
 
   .mobile-player-view-active #close-player-view-button {
@@ -517,4 +545,8 @@
   #player-property-table td:first-child {
     width: 80px;
   }
+
+  #player-details-content {
+    overflow-x: auto;
+  }
 }
diff --git a/content/browser/resources/media/media_internals.html b/content/browser/resources/media/media_internals.html
index 24f92896..ffbd730d 100644
--- a/content/browser/resources/media/media_internals.html
+++ b/content/browser/resources/media/media_internals.html
@@ -46,9 +46,11 @@
                 <h2 id="player-details-title">Player Properties</h2>
                 <div id="player-actions">
                   <input id="filter-text" type="text" placeholder="Filter log...">
-                  <button id="copy-log-button">Copy All</button>
-                  <button id="save-log-button">Save Log</button>
-                  <button id="close-player-view-button">Close</button>
+                  <div class="action-buttons">
+                    <button id="copy-log-button">Copy All</button>
+                    <button id="save-log-button">Save Log</button>
+                    <button id="close-player-view-button">Close</button>
+                  </div>
                 </div>
               </div>
               <div id="player-details-content">
diff --git a/content/browser/service_worker/service_worker_cache_writer.cc b/content/browser/service_worker/service_worker_cache_writer.cc
index 73fc74ba..319e450 100644
--- a/content/browser/service_worker/service_worker_cache_writer.cc
+++ b/content/browser/service_worker/service_worker_cache_writer.cc
@@ -864,7 +864,7 @@
     checksum_.Update(data->first(length));
   }
 
-  mojo_base::BigBuffer big_buffer(base::as_bytes(data->span().first(length)));
+  mojo_base::BigBuffer big_buffer(base::as_bytes(data->first(length)));
   writer_->WriteData(
       std::move(big_buffer),
       base::BindOnce(&AsyncOnlyCompletionCallbackAdaptor::WrappedCallback,
diff --git a/content/browser/shared_storage/shared_storage_worklet_host.cc b/content/browser/shared_storage/shared_storage_worklet_host.cc
index d7a3136..d0d187f8 100644
--- a/content/browser/shared_storage/shared_storage_worklet_host.cc
+++ b/content/browser/shared_storage/shared_storage_worklet_host.cc
@@ -1822,7 +1822,7 @@
 }
 
 void SharedStorageWorkletHost::OnOptInRequestComplete(
-    std::unique_ptr<std::string> response_body) {
+    std::optional<std::string> response_body) {
   const auto* response_info = data_origin_opt_in_url_loader_->ResponseInfo();
   if (!response_body || !response_info ||
       !blink::IsJSONMimeType(response_info->mime_type)) {
diff --git a/content/browser/shared_storage/shared_storage_worklet_host.h b/content/browser/shared_storage/shared_storage_worklet_host.h
index ec73e670..23f242d 100644
--- a/content/browser/shared_storage/shared_storage_worklet_host.h
+++ b/content/browser/shared_storage/shared_storage_worklet_host.h
@@ -227,7 +227,7 @@
       bool opted_in,
       std::string data_origin_opt_in_error_message);
 
-  void OnOptInRequestComplete(std::unique_ptr<std::string> response_body);
+  void OnOptInRequestComplete(std::optional<std::string> response_body);
 
   void OnJsonParsed(std::optional<base::Value::List> result);
 
diff --git a/content/browser/webid/idp_network_request_manager.cc b/content/browser/webid/idp_network_request_manager.cc
index c1e7b88..d6f41afef 100644
--- a/content/browser/webid/idp_network_request_manager.cc
+++ b/content/browser/webid/idp_network_request_manager.cc
@@ -4,6 +4,9 @@
 
 #include "content/browser/webid/idp_network_request_manager.h"
 
+#include <optional>
+#include <string>
+
 #include "base/barrier_closure.h"
 #include "base/base64.h"
 #include "base/containers/flat_set.h"
@@ -900,7 +903,7 @@
 }
 
 void OnLogoutCompleted(IdpNetworkRequestManager::LogoutCallback callback,
-                       std::unique_ptr<std::string> response_body,
+                       std::optional<std::string> response_body,
                        int response_code,
                        const std::string& mime_type,
                        bool cors_error) {
@@ -1400,7 +1403,7 @@
 
 void IdpNetworkRequestManager::OnDownloadedImage(
     ImageCallback callback,
-    std::unique_ptr<std::string> response_body,
+    std::optional<std::string> response_body,
     int response_code,
     const std::string& mime_type,
     bool cors_error) {
diff --git a/content/browser/webid/idp_network_request_manager.h b/content/browser/webid/idp_network_request_manager.h
index a06c59d..435e70a 100644
--- a/content/browser/webid/idp_network_request_manager.h
+++ b/content/browser/webid/idp_network_request_manager.h
@@ -358,7 +358,7 @@
   bool IsCrossSiteIframe() const;
 
   void OnDownloadedImage(ImageCallback callback,
-                         std::unique_ptr<std::string> response_body,
+                         std::optional<std::string> response_body,
                          int response_code,
                          const std::string& mime_type,
                          bool cors_error);
diff --git a/content/browser/webid/navigation_interceptor.cc b/content/browser/webid/navigation_interceptor.cc
index fcf013c..a8e31bb 100644
--- a/content/browser/webid/navigation_interceptor.cc
+++ b/content/browser/webid/navigation_interceptor.cc
@@ -10,6 +10,7 @@
 #include "base/values.h"
 #include "content/browser/webid/flags.h"
 #include "content/browser/webid/request_service.h"
+#include "content/browser/webid/webid_utils.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
@@ -38,10 +39,11 @@
     NavigationThrottleRegistry& registry)
     : NavigationInterceptor(
           registry,
-          base::BindRepeating([](content::RenderFrameHost* rfh)
-                                  -> blink::mojom::FederatedAuthRequest* {
-            return webid::RequestService::GetOrCreateForCurrentDocument(rfh);
-          })) {}
+          base::BindRepeating(
+              [](content::RenderFrameHost* rfh) -> RequestService* {
+                return webid::RequestService::GetOrCreateForCurrentDocument(
+                    rfh);
+              })) {}
 
 NavigationInterceptor::NavigationInterceptor(
     NavigationThrottleRegistry& registry,
@@ -58,6 +60,12 @@
     return PROCEED;
   }
 
+  // Only intercept user-initiated navigations because we want to use
+  // active mode.
+  if (!DidNavigationHandleHaveActivation(navigation_handle())) {
+    return PROCEED;
+  }
+
   auto* headers = navigation_handle()->GetResponseHeaders();
 
   if (!headers) {
@@ -121,6 +129,7 @@
   service_builder_.Run(rfh)->RequestToken(
       std::move(*idp_get_params_vector),
       password_manager::CredentialMediationRequirement::kOptional,
+      navigation_handle(),
       base::BindOnce(&NavigationInterceptor::OnTokenResponse,
                      weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/content/browser/webid/navigation_interceptor.h b/content/browser/webid/navigation_interceptor.h
index e5d1e0c..c7978e96 100644
--- a/content/browser/webid/navigation_interceptor.h
+++ b/content/browser/webid/navigation_interceptor.h
@@ -22,6 +22,7 @@
 class RenderFrameHost;
 
 namespace webid {
+class RequestService;
 
 // The NavigationInterceptor enables Identity Providers to control
 // navigations to their endpoints by cancelling it and replacing it
@@ -45,8 +46,7 @@
   };
 
   using RequestServiceBuilder =
-      base::RepeatingCallback<blink::mojom::FederatedAuthRequest*(
-          content::RenderFrameHost* rfh)>;
+      base::RepeatingCallback<RequestService*(content::RenderFrameHost* rfh)>;
 
   explicit NavigationInterceptor(NavigationThrottleRegistry& registry);
   NavigationInterceptor(NavigationThrottleRegistry& registry,
diff --git a/content/browser/webid/navigation_interceptor_unittest.cc b/content/browser/webid/navigation_interceptor_unittest.cc
index bbee44cf..e22e6b75 100644
--- a/content/browser/webid/navigation_interceptor_unittest.cc
+++ b/content/browser/webid/navigation_interceptor_unittest.cc
@@ -10,6 +10,8 @@
 #include "base/strings/string_util.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
+#include "content/browser/webid/accounts_fetcher.h"
+#include "content/browser/webid/request_service.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/web_contents_observer.h"
@@ -26,12 +28,26 @@
 #include "url/gurl.h"
 
 using ::testing::_;
+using testing::WithArgs;
 
 namespace content::webid {
 
-class MockFederatedAuthRequest : public blink::mojom::FederatedAuthRequest {
+class InterceptorMockNavigationHandle : public MockNavigationHandle {
  public:
-  explicit MockFederatedAuthRequest() {}
+  explicit InterceptorMockNavigationHandle(WebContents* web_contents)
+      : MockNavigationHandle(web_contents) {}
+
+  blink::mojom::NavigationInitiatorActivationAndAdStatus
+  GetNavigationInitiatorActivationAndAdStatus() override {
+    return blink::mojom::NavigationInitiatorActivationAndAdStatus::
+        kStartedWithTransientActivationFromNonAd;
+  }
+};
+
+class MockFederatedAuthRequest : public RequestService {
+ public:
+  explicit MockFederatedAuthRequest(RenderFrameHost* rfh)
+      : RequestService(rfh) {}
 
   MOCK_METHOD(
       void,
@@ -39,6 +55,7 @@
       (std::vector<blink::mojom::IdentityProviderGetParametersPtr>
            idp_get_params,
        password_manager::CredentialMediationRequirement mediation_requirement,
+       NavigationHandle* navigation_handle,
        RequestTokenCallback callback),
       (override));
   MOCK_METHOD(void, CancelTokenRequest, (), (override));
@@ -181,10 +198,11 @@
   data_decoder::test::InProcessDataDecoder in_process_data_decoder;
 
   std::unique_ptr<MockFederatedAuthRequest> federated_auth_request =
-      std::make_unique<MockFederatedAuthRequest>();
+      std::make_unique<MockFederatedAuthRequest>(
+          web_contents()->GetPrimaryMainFrame());
 
   NavigateAndCommit(GURL("https://rp.example/"));
-  content::MockNavigationHandle mock_navigation_handle(web_contents());
+  InterceptorMockNavigationHandle mock_navigation_handle(web_contents());
   mock_navigation_handle.set_render_frame_host(
       web_contents()->GetPrimaryMainFrame());
   mock_navigation_handle.set_is_in_primary_main_frame(true);
@@ -202,16 +220,16 @@
   content::MockNavigationThrottleRegistry registry(&mock_navigation_handle);
 
   webid::NavigationInterceptor interceptor(
-      registry, base::BindLambdaForTesting(
-                    [&federated_auth_request](content::RenderFrameHost* rfh)
-                        -> blink::mojom::FederatedAuthRequest* {
-                      return federated_auth_request.get();
-                    }));
+      registry,
+      base::BindLambdaForTesting(
+          [&federated_auth_request](RenderFrameHost* rfh) -> RequestService* {
+            return federated_auth_request.get();
+          }));
 
   GURL redirect_to("https://rp.example");
 
-  EXPECT_CALL(*federated_auth_request.get(), RequestToken(_, _, _))
-      .WillOnce(testing::WithArgs<2>(
+  EXPECT_CALL(*federated_auth_request.get(), RequestToken)
+      .WillOnce(WithArgs<3>(
           [&redirect_to](
               blink::mojom::FederatedAuthRequest::RequestTokenCallback
                   callback) {
@@ -234,14 +252,15 @@
   EXPECT_EQ(observer.started_url(), redirect_to);
 }
 
-TEST_F(NavigationInterceptorTest, WillProcessResponseTokenRequestFails) {
-  // Uses an in-process data decoder service for testing.
-  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
-
-  auto federated_auth_request = std::make_unique<MockFederatedAuthRequest>();
+TEST_F(NavigationInterceptorTest, WillProcessResponseNoActivation) {
+  std::unique_ptr<MockFederatedAuthRequest> federated_auth_request =
+      std::make_unique<MockFederatedAuthRequest>(
+          web_contents()->GetPrimaryMainFrame());
 
   NavigateAndCommit(GURL("https://rp.example/"));
-  content::MockNavigationHandle mock_navigation_handle(web_contents());
+  // MockNavigationHandle (as opposed to InterceptorNavigationHandle) does not
+  // have activation.
+  MockNavigationHandle mock_navigation_handle(web_contents());
   mock_navigation_handle.set_render_frame_host(
       web_contents()->GetPrimaryMainFrame());
   mock_navigation_handle.set_is_in_primary_main_frame(true);
@@ -259,14 +278,51 @@
   content::MockNavigationThrottleRegistry registry(&mock_navigation_handle);
 
   webid::NavigationInterceptor interceptor(
-      registry, base::BindLambdaForTesting(
-                    [&federated_auth_request](content::RenderFrameHost* rfh)
-                        -> blink::mojom::FederatedAuthRequest* {
-                      return federated_auth_request.get();
-                    }));
+      registry,
+      base::BindLambdaForTesting(
+          [&federated_auth_request](RenderFrameHost* rfh) -> RequestService* {
+            return federated_auth_request.get();
+          }));
 
-  EXPECT_CALL(*federated_auth_request.get(), RequestToken(_, _, _))
-      .WillOnce(testing::WithArgs<2>(
+  // Because there was no activation, we should proceed.
+  auto result = interceptor.WillProcessResponse();
+  EXPECT_EQ(result, content::NavigationThrottle::PROCEED);
+}
+
+TEST_F(NavigationInterceptorTest, WillProcessResponseTokenRequestFails) {
+  // Uses an in-process data decoder service for testing.
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
+
+  auto federated_auth_request = std::make_unique<MockFederatedAuthRequest>(
+      web_contents()->GetPrimaryMainFrame());
+
+  NavigateAndCommit(GURL("https://rp.example/"));
+  InterceptorMockNavigationHandle mock_navigation_handle(web_contents());
+  mock_navigation_handle.set_render_frame_host(
+      web_contents()->GetPrimaryMainFrame());
+  mock_navigation_handle.set_is_in_primary_main_frame(true);
+
+  auto headers = base::MakeRefCounted<net::HttpResponseHeaders>("");
+  headers->AddHeader("FedCM-Intercept-Navigation",
+                     net::structured_headers::SerializeDictionary(
+                         webid::EncodeParams({
+                             {"config_url", "https://idp.example/fedcm.json"},
+                             {"client_id", "1234"},
+                         }))
+                         .value());
+  mock_navigation_handle.set_response_headers(headers);
+
+  content::MockNavigationThrottleRegistry registry(&mock_navigation_handle);
+
+  webid::NavigationInterceptor interceptor(
+      registry,
+      base::BindLambdaForTesting(
+          [&federated_auth_request](RenderFrameHost* rfh) -> RequestService* {
+            return federated_auth_request.get();
+          }));
+
+  EXPECT_CALL(*federated_auth_request.get(), RequestToken)
+      .WillOnce(WithArgs<3>(
           [](blink::mojom::FederatedAuthRequest::RequestTokenCallback
                  callback) {
             std::move(callback).Run(
diff --git a/content/browser/webid/network_request_manager.cc b/content/browser/webid/network_request_manager.cc
index d71da1f2..bfc4a00 100644
--- a/content/browser/webid/network_request_manager.cc
+++ b/content/browser/webid/network_request_manager.cc
@@ -4,7 +4,11 @@
 
 #include "content/browser/webid/network_request_manager.h"
 
+#include <optional>
+#include <string>
+
 #include "base/strings/string_util.h"
+#include "base/types/optional_ref.h"
 #include "content/browser/devtools/devtools_instrumentation.h"
 #include "content/browser/webid/flags.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
@@ -26,7 +30,7 @@
 // response size that is a part of this protocol.
 constexpr int maxResponseSizeInKiB = 1024;
 
-ParseStatus GetResponseError(std::string* response_body,
+ParseStatus GetResponseError(base::optional_ref<std::string> response_body,
                              int response_code,
                              const std::string& mime_type) {
   if (response_code == net::HTTP_NOT_FOUND) {
@@ -64,12 +68,12 @@
 }
 
 void OnDownloadedJson(ParseJsonCallback parse_json_callback,
-                      std::unique_ptr<std::string> response_body,
+                      std::optional<std::string> response_body,
                       int response_code,
                       const std::string& mime_type,
                       bool cors_error) {
   ParseStatus parse_status =
-      GetResponseError(response_body.get(), response_code, mime_type);
+      GetResponseError(response_body, response_code, mime_type);
 
   if (parse_status != ParseStatus::kSuccess) {
     std::move(parse_json_callback)
@@ -193,7 +197,7 @@
 void NetworkRequestManager::OnDownloadedUrl(
     std::unique_ptr<network::SimpleURLLoader> url_loader,
     DownloadCallback callback,
-    std::unique_ptr<std::string> response_body) {
+    std::optional<std::string> response_body) {
   auto* response_info = url_loader->ResponseInfo();
   // Use the HTTP response code, if available. If it is not available, use the
   // NetError(). Note that it is acceptable to put these in the same int because
@@ -210,7 +214,7 @@
   if (it != urlloader_devtools_request_id_map_.end()) {
     auto request_id = it->second;
     const std::string& response_body_str =
-        response_body ? *response_body : std::string();
+        response_body.value_or(std::string());
     auto completion_status = status.value_or(
         network::URLLoaderCompletionStatus(url_loader->NetError()));
 
diff --git a/content/browser/webid/network_request_manager.h b/content/browser/webid/network_request_manager.h
index d56c2638..4faf1f4 100644
--- a/content/browser/webid/network_request_manager.h
+++ b/content/browser/webid/network_request_manager.h
@@ -24,7 +24,7 @@
 namespace content::webid {
 
 using DownloadCallback =
-    base::OnceCallback<void(std::unique_ptr<std::string> response_body,
+    base::OnceCallback<void(std::optional<std::string> response_body,
                             int response_code,
                             const std::string& mime_type,
                             bool cors_error)>;
@@ -103,7 +103,7 @@
   // Called when download initiated by DownloadUrl() completes.
   void OnDownloadedUrl(std::unique_ptr<network::SimpleURLLoader> url_loader,
                        DownloadCallback callback,
-                       std::unique_ptr<std::string> response_body);
+                       std::optional<std::string> response_body);
 
   std::unique_ptr<network::ResourceRequest> CreateUncredentialedResourceRequest(
       const GURL& target_url,
diff --git a/content/browser/webid/request_service.cc b/content/browser/webid/request_service.cc
index 8c79dd9..6671138f 100644
--- a/content/browser/webid/request_service.cc
+++ b/content/browser/webid/request_service.cc
@@ -40,6 +40,7 @@
 #include "content/browser/webid/webid_utils.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/webid/federated_identity_api_permission_context_delegate.h"
@@ -283,6 +284,16 @@
     std::vector<IdentityProviderGetParametersPtr> idp_get_params_ptrs,
     MediationRequirement requirement,
     RequestTokenCallback callback) {
+  // This call is coming from Mojo, so we have no navigation handle.
+  RequestToken(std::move(idp_get_params_ptrs), requirement,
+               /*navigation_handle=*/nullptr, std::move(callback));
+}
+
+void RequestService::RequestToken(
+    std::vector<IdentityProviderGetParametersPtr> idp_get_params_ptrs,
+    MediationRequirement requirement,
+    NavigationHandle* navigation_handle,
+    RequestTokenCallback callback) {
   if (ShouldTerminateRequest(idp_get_params_ptrs, requirement)) {
     return;
   }
@@ -337,6 +348,8 @@
   }
 
   had_transient_user_activation_ =
+      (navigation_handle &&
+       DidNavigationHandleHaveActivation(navigation_handle)) ||
       render_frame_host().HasTransientUserActivation();
 
   // Store the previous `idp_order_` value from this class. Note that this is {}
diff --git a/content/browser/webid/request_service.h b/content/browser/webid/request_service.h
index 0c8e875..492deaa 100644
--- a/content/browser/webid/request_service.h
+++ b/content/browser/webid/request_service.h
@@ -41,6 +41,7 @@
 
 class FederatedIdentityAutoReauthnPermissionContextDelegate;
 class FederatedIdentityPermissionContextDelegate;
+class NavigationHandle;
 class RenderFrameHost;
 
 namespace webid {
@@ -111,6 +112,16 @@
   // this method.
   void ResetAndDeleteThisForTesting();
 
+  // An overload of the mojo version of RequestToken. If |navigation_handle|
+  // is provided, that handle is checked to see if user activation is present.
+  // This is virtual so that it can be mocked.MockNavigationThrottleRegistry
+  virtual void RequestToken(
+      std::vector<blink::mojom::IdentityProviderGetParametersPtr>
+          idp_get_params_ptrs,
+      MediationRequirement requirement,
+      NavigationHandle* navigation_handle,
+      RequestTokenCallback);
+
   // blink::mojom::FederatedAuthRequest:
   void RequestToken(std::vector<blink::mojom::IdentityProviderGetParametersPtr>
                         idp_get_params_ptrs,
diff --git a/content/browser/webid/webid_utils.cc b/content/browser/webid/webid_utils.cc
index b3e36fd..e28eb49 100644
--- a/content/browser/webid/webid_utils.cc
+++ b/content/browser/webid/webid_utils.cc
@@ -14,6 +14,7 @@
 #include "content/browser/webid/metrics.h"
 #include "content/browser/webid/request_page_data.h"
 #include "content/public/browser/browser_context.h"
+#include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/runtime_feature_state/runtime_feature_state_document_data.h"
 #include "content/public/browser/webid/federated_identity_api_permission_context_delegate.h"
 #include "content/public/browser/webid/federated_identity_permission_context_delegate.h"
@@ -470,6 +471,12 @@
   }
 }
 
+bool DidNavigationHandleHaveActivation(NavigationHandle* handle) {
+  return handle->GetNavigationInitiatorActivationAndAdStatus() !=
+         blink::mojom::NavigationInitiatorActivationAndAdStatus::
+             kDidNotStartWithTransientActivation;
+}
+
 perfetto::NamedTrack CreatePerfettoTrackForFedCM(void* class_pointer) {
   return perfetto::NamedTrack::ThreadScoped(
       "FedCM", reinterpret_cast<uintptr_t>(class_pointer));
diff --git a/content/browser/webid/webid_utils.h b/content/browser/webid/webid_utils.h
index d62046ea..c681ac0 100644
--- a/content/browser/webid/webid_utils.h
+++ b/content/browser/webid/webid_utils.h
@@ -27,6 +27,7 @@
 class FederatedIdentityApiPermissionContextDelegate;
 class FederatedIdentityPermissionContextDelegate;
 enum class IdpSigninStatus;
+class NavigationHandle;
 class RenderFrameHost;
 
 namespace webid {
@@ -116,6 +117,8 @@
                                    const char* fetch_description,
                                    int response_code);
 
+bool DidNavigationHandleHaveActivation(NavigationHandle* handle);
+
 // Creates a Perfetto track for the class pointed to by `class_pointer`.
 perfetto::NamedTrack CreatePerfettoTrackForFedCM(void* class_pointer);
 
diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc
index 1429422..2b38e39 100644
--- a/content/child/child_thread_impl.cc
+++ b/content/child/child_thread_impl.cc
@@ -23,6 +23,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/memory/memory_pressure_listener.h"
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_pump.h"
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java
index 706799e..3bfe892 100644
--- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java
+++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java
@@ -137,6 +137,9 @@
             "AccessibilityNodeInfo.requestImageData";
     public static final String EXTRAS_KEY_IMAGE_DATA = "AccessibilityNodeInfo.imageData";
 
+    public static final String EXTRAS_KEY_REQUEST_LAYOUT_BASED_ACTIONS =
+            "AccessibilityNodeInfo.requestLayoutBasedActions";
+
     public static final String ACCESSIBILITY_SPANNABLE_CREATION_TIME =
             "Accessibility.Android.Performance.SpannableCreationTime2";
     private static final int MAX_TIME_BUCKET = 5 * 1000; // 5,000 microseconds = 5ms.
@@ -199,7 +202,8 @@
             boolean visibleToUser,
             boolean hasCharacterLocations,
             boolean isRequired,
-            boolean isHeading) {
+            boolean isHeading,
+            boolean hasLayoutBasedActions) {
         node.setCheckable(checkable);
         node.setClickable(clickable);
         node.setEditable(editable);
@@ -225,6 +229,11 @@
             availableExtraData.add(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY);
             availableExtraData.add(EXTRA_DATA_TEXT_CHARACTER_LOCATION_IN_WINDOW_KEY);
         }
+
+        if (clickable && !hasLayoutBasedActions) {
+            availableExtraData.add(EXTRAS_KEY_REQUEST_LAYOUT_BASED_ACTIONS);
+        }
+
         node.setAvailableExtraData(availableExtraData);
 
         node.setMovementGranularities(
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java
index 0122005cd..3b7812f 100644
--- a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java
@@ -55,6 +55,7 @@
 import static org.chromium.build.NullUtil.assumeNonNull;
 import static org.chromium.content.browser.accessibility.AccessibilityNodeInfoBuilder.EXTRAS_DATA_REQUEST_IMAGE_DATA_KEY;
 import static org.chromium.content.browser.accessibility.AccessibilityNodeInfoBuilder.EXTRAS_KEY_URL;
+import static org.chromium.content.browser.accessibility.AccessibilityNodeInfoBuilder.EXTRAS_KEY_REQUEST_LAYOUT_BASED_ACTIONS;
 import static org.chromium.content_public.browser.ContentFeatureList.ACCESSIBILITY_MANAGE_BROADCAST_RECEIVER_ON_BACKGROUND;
 
 import android.annotation.SuppressLint;
@@ -2128,6 +2129,21 @@
     }
 
     @CalledByNative
+    private void handleDefaultActionVerbChanged(int virtualViewId) {
+        if (isAccessibilityEnabled()) {
+            // TODO(crbug.com/460580025): Check if AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED
+            // is the right type to use here.
+            AccessibilityEvent event =
+                    AccessibilityEvent.obtain(AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);
+            if (event == null) {
+                return;
+            }
+            event.setSource(mView, virtualViewId);
+            requestSendAccessibilityEvent(event);
+        }
+    }
+
+    @CalledByNative
     private void announceLiveRegionText(String text) {
         assert !ContentFeatureMap.isEnabled(
                         ContentFeatureList.ACCESSIBILITY_DEPRECATE_TYPE_ANNOUNCE)
@@ -2269,6 +2285,9 @@
             case EXTRA_DATA_ABSOLUTE_DRAWING_ORDER_KEY:
                 getPaintOrder(virtualViewId, info);
                 break;
+            case EXTRAS_KEY_REQUEST_LAYOUT_BASED_ACTIONS:
+                requestLayoutBasedActions(virtualViewId, info);
+                break;
         }
     }
 
@@ -2342,6 +2361,11 @@
         info.getExtras().putInt(EXTRA_DATA_ABSOLUTE_DRAWING_ORDER_KEY, paintOrder);
     }
 
+    private void requestLayoutBasedActions(int virtualViewId, AccessibilityNodeInfoCompat info) {
+        WebContentsAccessibilityImplJni.get()
+                .requestLayoutBasedActions(mNativeObj, virtualViewId, info);
+    }
+
     @NativeMethods
     interface Natives {
         long init(
@@ -2518,5 +2542,9 @@
                 boolean hasSentPreviousRequest);
 
         int getPaintOrder(long nativeWebContentsAccessibilityAndroid, int id);
+        void requestLayoutBasedActions(
+                long nativeWebContentsAccessibilityAndroid,
+                int id,
+                AccessibilityNodeInfoCompat info);
     }
 }
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index 2d1fd4c..6030fca 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -1291,6 +1291,14 @@
 BASE_FEATURE(kAccessibilityImproveLiveRegionAnnounce,
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+// When this feature is enabled, the accessibility tree will be requested to
+// layout based on the actions that are performed on the renderer side. In
+// particular this will be used to determine whether or not a node is clickable
+// or not.
+BASE_FEATURE(kAccessibilityRequestLayoutBasedActions,
+             "AccessibilityRequestLayoutBasedActions",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 // Enables the second iteration of AccessibilityPageZoom, which continues
 // the work completed in the first experiment and the subsequent fast-follow.
 // This version of the experiment explores enabling OS-level adjustments.
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index 29c999a0..58359ed 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -348,6 +348,7 @@
     kAccessibilityDeprecateJavaNodeCacheDisableCache;
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kAccessibilityDeprecateTypeAnnounce);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kAccessibilityImproveLiveRegionAnnounce);
+CONTENT_EXPORT BASE_DECLARE_FEATURE(kAccessibilityRequestLayoutBasedActions);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kAccessibilityPageZoomV2);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(
     kAccessibilityPopulateSupplementalDescriptionApi);
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc
index edb07d83..b7102147 100644
--- a/content/renderer/accessibility/render_accessibility_impl.cc
+++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -416,6 +416,7 @@
     case ax::mojom::Action::kStopDuckingMedia:
     case ax::mojom::Action::kSuspendMedia:
     case ax::mojom::Action::kLongClick:
+    case ax::mojom::Action::kRequestLayoutBasedAction:
       break;
   }
 }
diff --git a/content/renderer/font_data/font_data_manager.cc b/content/renderer/font_data/font_data_manager.cc
index ed1302a..9ef41c24 100644
--- a/content/renderer/font_data/font_data_manager.cc
+++ b/content/renderer/font_data/font_data_manager.cc
@@ -80,8 +80,9 @@
 FontDataManager::~FontDataManager() = default;
 
 int FontDataManager::onCountFamilies() const {
+  base::AutoLock locked(family_names_lock_);
   if (family_names_.empty()) {
-    GetAllFamilyNames();
+    GetAllFamilyNamesLockRequired();
   }
 
   return family_names_.size();
@@ -89,14 +90,15 @@
 
 void FontDataManager::onGetFamilyName(int index,
                                       SkString* requested_family_name) const {
-  if (family_names_.empty()) {
-    GetAllFamilyNames();
-  }
-
   if (index < 0) {
     return;
   }
 
+  base::AutoLock locked(family_names_lock_);
+  if (family_names_.empty()) {
+    GetAllFamilyNamesLockRequired();
+  }
+
   size_t family_index = static_cast<size_t>(index);
   if (family_index >= family_names_.size()) {
     return;
@@ -341,7 +343,7 @@
       // request that resolves to the same font file.
       base::MemoryMappedFile* file_mapping = nullptr;
       {
-        base::AutoLock locked(lock_);
+        base::AutoLock locked(mapped_files_lock_);
 
         std::unique_ptr<base::MemoryMappedFile>& mapped_files_entry =
             mapped_files_[match_result->typeface_data->get_font_file()->id];
@@ -374,7 +376,7 @@
       // process. A cache is used to avoid mapping the same memory space
       // multiple time.
       {
-        base::AutoLock locked(lock_);
+        base::AutoLock locked(mapped_regions_lock_);
 
         const auto iter =
             mapped_regions_.find(font_data_memory_region.GetGUID());
@@ -405,13 +407,13 @@
   return typeface;
 }
 
-void FontDataManager::GetAllFamilyNames() const {
+void FontDataManager::GetAllFamilyNamesLockRequired() const {
   GetRemoteFontDataService().GetAllFamilyNames(&family_names_);
 }
 
 std::optional<sk_sp<SkTypeface>> FontDataManager::TryGetFromCache(
     const FontDataManager::MatchFamilyRequest& request) const {
-  base::AutoLock locked(lock_);
+  base::AutoLock locked(typeface_cache_lock_);
   auto iter = typeface_cache_.Get(request);
   if (iter != typeface_cache_.end()) {
     return iter->second;
@@ -423,7 +425,7 @@
 void FontDataManager::AddToCache(
     const FontDataManager::MatchFamilyRequest& request,
     sk_sp<SkTypeface> typeface) const {
-  base::AutoLock locked(lock_);
+  base::AutoLock locked(typeface_cache_lock_);
   typeface_cache_.Put(std::move(request), typeface);
 }
 
diff --git a/content/renderer/font_data/font_data_manager.h b/content/renderer/font_data/font_data_manager.h
index 1eb4b43..e9d59ad 100644
--- a/content/renderer/font_data/font_data_manager.h
+++ b/content/renderer/font_data/font_data_manager.h
@@ -90,8 +90,9 @@
       mojom::MatchFamilyNameResultPtr match_result) const;
 
   // This must be const to allow being called from onCountFamilies and
-  // onGetFamilyNames, but it does mutate family_names_.
-  void GetAllFamilyNames() const;
+  // onGetFamilyNames, but it does mutate family_names_. Requires holding
+  // `family_names_lock_`.
+  void GetAllFamilyNamesLockRequired() const;
 
   // Key of the typeface_cache_.
   struct MatchFamilyRequest {
@@ -131,21 +132,32 @@
              lhs.width == rhs.width && lhs.slant == rhs.slant;
     }
   };
-  // Cache of the font requests to existing typefaces.
+
+  // Calls to this class can be on any thread hence there is a lock to guard
+  // each of the caches. The mapped regions, mapped files, typeface, and family
+  // names caches are independent of one another (they're not read/written in
+  // the same circumstances and they don't have to stay in sync), so they can
+  // each get a separate lock.
+  mutable base::Lock mapped_regions_lock_;
+  mutable base::Lock mapped_files_lock_;
+  mutable base::Lock family_names_lock_;
+  mutable base::Lock typeface_cache_lock_;
+
+  // Cache of the font requests to existing typefaces. Allows replying directly
+  // with a typeface for a match request that was already made.
   mutable base::HashingLRUCache<MatchFamilyRequest,
                                 sk_sp<SkTypeface>,
                                 MatchFamilyRequestHash,
                                 MatchFamilyRequestEqual>
-      typeface_cache_;
+      typeface_cache_ GUARDED_BY(typeface_cache_lock_);
 
-  // Calls to this class can be on any thread hence there is a lock to guard
-  // the cache.
-  mutable base::Lock lock_;
-
-  // Cache of the shared memory region by GUID to known font mappings.
+  // Cache of the shared memory region by GUID to known font mappings. Allows
+  // reusing a pre-existing shared memory region if it contains the data
+  // required to fulfill a match request even though that match request doesn't
+  // correspond to a typeface cached in `typeface_cache_`.
   mutable absl::flat_hash_map<base::UnguessableToken,
                               base::ReadOnlySharedMemoryMapping>
-      mapped_regions_;
+      mapped_regions_ GUARDED_BY(mapped_regions_lock_);
 
   // Cache of the memory mapped files to ensure the mapping lives.
   // The key is an ID received from the renderer along with the handle that
@@ -159,13 +171,13 @@
   // typeface objects that reference them which can be used for the entire
   // lifetime of the renderer process.
   mutable absl::flat_hash_map<uint64_t, std::unique_ptr<base::MemoryMappedFile>>
-      mapped_files_ GUARDED_BY(lock_);
+      mapped_files_ GUARDED_BY(mapped_files_lock_);
 
   // A cache of all the font family names that could be returned by
   // onGetFamilyName. When populated, this has the same amount of elements as
   // returned by onCountFamilies. This is populated on the first call to either
   // onCountFamilies or onGetFamilyName.
-  mutable std::vector<std::string> family_names_;
+  mutable std::vector<std::string> family_names_ GUARDED_BY(family_names_lock_);
 
 #if BUILDFLAG(ENABLE_FREETYPE)
   sk_sp<SkFontMgr> custom_fnt_mgr_;
diff --git a/content/shell/app/shell_main_delegate.cc b/content/shell/app/shell_main_delegate.cc
index 8ba5b711..3cd7013 100644
--- a/content/shell/app/shell_main_delegate.cc
+++ b/content/shell/app/shell_main_delegate.cc
@@ -17,6 +17,7 @@
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/no_destructor.h"
 #include "base/path_service.h"
 #include "base/process/current_process.h"
diff --git a/content/shell/browser/shell_platform_delegate_mac.mm b/content/shell/browser/shell_platform_delegate_mac.mm
index 2c4a400..1994e7f 100644
--- a/content/shell/browser/shell_platform_delegate_mac.mm
+++ b/content/shell/browser/shell_platform_delegate_mac.mm
@@ -82,7 +82,7 @@
 
 namespace {
 
-NSString* kWindowTitle = @"Content Shell";
+NSString* const kWindowTitle = @"Content Shell";
 
 // Layout constants (in view coordinates)
 const CGFloat kButtonWidth = 72;
diff --git a/content/test/gpu/gpu_tests/pixel_integration_test.py b/content/test/gpu/gpu_tests/pixel_integration_test.py
index 3b32c269..8cf122d 100644
--- a/content/test/gpu/gpu_tests/pixel_integration_test.py
+++ b/content/test/gpu/gpu_tests/pixel_integration_test.py
@@ -80,6 +80,14 @@
           'Pixel_OffscreenCanvasWebGLSoftwareCompositingWorker',
       }
 
+    if host_information.IsMac() and host_information.Isx86Cpu():
+      serial_tests |= {
+          # Can take a while to finish and does not reliably send heartbeats in
+          # the meantime. To avoid potential slowdowns from other tests which
+          # cause flaky timeouts, run this test serially on older hardware.
+          'Pixel_SVGHuge',
+      }
+
     if host_information.IsWindows() and host_information.IsArmCpu():
       serial_tests |= {
           # Context loss tests don't like being run in parallel on Windows
diff --git a/content/zygote/zygote_linux.cc b/content/zygote/zygote_linux.cc
index c90abfa..5a6f1c0 100644
--- a/content/zygote/zygote_linux.cc
+++ b/content/zygote/zygote_linux.cc
@@ -25,6 +25,7 @@
 #include "base/files/platform_file.h"
 #include "base/linux_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/metrics/histogram_shared_memory.h"
 #include "base/notreached.h"
 #include "base/numerics/safe_conversions.h"
diff --git a/crypto/BUILD.gn b/crypto/BUILD.gn
index b2a61b9..e42d1187 100644
--- a/crypto/BUILD.gn
+++ b/crypto/BUILD.gn
@@ -97,6 +97,8 @@
       "apple/keychain_util.mm",
       "apple/keychain_v2.h",
       "apple/keychain_v2.mm",
+      "apple/scoped_keychain_user_interaction_allowed.cc",
+      "apple/scoped_keychain_user_interaction_allowed.h",
     ]
 
     if (is_mac) {
diff --git a/crypto/apple/keychain.cc b/crypto/apple/keychain.cc
index b4c6b43..9544f6eb 100644
--- a/crypto/apple/keychain.cc
+++ b/crypto/apple/keychain.cc
@@ -21,50 +21,4 @@
 Keychain::Keychain() = default;
 Keychain::~Keychain() = default;
 
-#if BUILDFLAG(IS_MAC)
-
-// ---------- ScopedKeychainUserInteractionAllowed ----------
-
-// On the Mac, the SecItem keychain API has ways to suppress user interaction,
-// but none of those ways work when using it to access file-based keychains.
-// This was filed as FB16959400, but until that is addressed, this usage of
-// deprecated API cannot be removed.
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-
-ScopedKeychainUserInteractionAllowed::ScopedKeychainUserInteractionAllowed(
-    Boolean allowed,
-    OSStatus* status) {
-  Boolean was_allowed;
-  OSStatus local_status = noErr;
-  absl::Cleanup cleanup = [&status, &local_status] {
-    if (status) {
-      *status = local_status;
-    }
-  };
-
-  local_status = SecKeychainGetUserInteractionAllowed(&was_allowed);
-  if (local_status != noErr) {
-    return;
-  }
-
-  local_status = SecKeychainSetUserInteractionAllowed(allowed);
-  if (local_status != noErr) {
-    return;
-  }
-
-  was_allowed_ = was_allowed;
-}
-
-ScopedKeychainUserInteractionAllowed::~ScopedKeychainUserInteractionAllowed() {
-  if (was_allowed_.has_value()) {
-    SecKeychainSetUserInteractionAllowed(was_allowed_.value());
-  }
-}
-
-#pragma clang diagnostic pop
-
-#endif  // BUILDFLAG(IS_MAC)
-
 }  // namespace crypto::apple
diff --git a/crypto/apple/keychain.h b/crypto/apple/keychain.h
index b5e604c..1d2264a52 100644
--- a/crypto/apple/keychain.h
+++ b/crypto/apple/keychain.h
@@ -7,7 +7,6 @@
 
 #include <Security/Security.h>
 
-#include <optional>
 #include <string_view>
 #include <vector>
 
@@ -56,34 +55,6 @@
   Keychain();
 };
 
-#if BUILDFLAG(IS_MAC)
-
-// Sets whether Keychain Services is permitted to display UI if needed by
-// calling SecKeychainSetUserInteractionAllowed. This operates in a scoped
-// fashion: on destruction, the previous state will be restored. This is useful
-// to interact with the Keychain on a best-effort basis, without displaying any
-// Keychain Services UI (which is beyond the application's control) to the user.
-class CRYPTO_EXPORT ScopedKeychainUserInteractionAllowed {
- public:
-  ScopedKeychainUserInteractionAllowed(
-      const ScopedKeychainUserInteractionAllowed&) = delete;
-  ScopedKeychainUserInteractionAllowed& operator=(
-      const ScopedKeychainUserInteractionAllowed&) = delete;
-
-  explicit ScopedKeychainUserInteractionAllowed(Boolean allowed,
-                                                OSStatus* status = nullptr);
-
-  ~ScopedKeychainUserInteractionAllowed();
-
- private:
-  // The previous value of whether user interaction was allowed, for
-  // restoration. If this is nullopt, this scoper did not succeed in its
-  // constructor, so it must not attempt to restore the value.
-  std::optional<Boolean> was_allowed_;
-};
-
-#endif  // BUILDFLAG(IS_MAC)
-
 }  // namespace crypto::apple
 
 #endif  // CRYPTO_APPLE_KEYCHAIN_H_
diff --git a/crypto/apple/scoped_keychain_user_interaction_allowed.cc b/crypto/apple/scoped_keychain_user_interaction_allowed.cc
new file mode 100644
index 0000000..abebb53
--- /dev/null
+++ b/crypto/apple/scoped_keychain_user_interaction_allowed.cc
@@ -0,0 +1,59 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "crypto/apple/scoped_keychain_user_interaction_allowed.h"
+
+#include <Security/Security.h>
+
+#include "build/build_config.h"
+#include "third_party/abseil-cpp/absl/cleanup/cleanup.h"
+
+#if BUILDFLAG(IS_MAC)
+
+// ---------- ScopedKeychainUserInteractionAllowed ----------
+
+// On the Mac, the SecItem keychain API has ways to suppress user interaction,
+// but none of those ways work when using it to access file-based keychains.
+// This was filed as FB16959400, but until that is addressed, this usage of
+// deprecated API cannot be removed.
+
+namespace crypto::apple {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+
+ScopedKeychainUserInteractionAllowed::ScopedKeychainUserInteractionAllowed(
+    Boolean allowed,
+    OSStatus* status) {
+  Boolean was_allowed;
+  OSStatus local_status = noErr;
+  absl::Cleanup cleanup = [&status, &local_status] {
+    if (status) {
+      *status = local_status;
+    }
+  };
+
+  local_status = SecKeychainGetUserInteractionAllowed(&was_allowed);
+  if (local_status != noErr) {
+    return;
+  }
+
+  local_status = SecKeychainSetUserInteractionAllowed(allowed);
+  if (local_status != noErr) {
+    return;
+  }
+
+  was_allowed_ = was_allowed;
+}
+
+ScopedKeychainUserInteractionAllowed::~ScopedKeychainUserInteractionAllowed() {
+  if (was_allowed_.has_value()) {
+    SecKeychainSetUserInteractionAllowed(was_allowed_.value());
+  }
+}
+
+#pragma clang diagnostic pop
+
+}  // namespace crypto::apple
+
+#endif  // BUILDFLAG(IS_MAC)
diff --git a/crypto/apple/scoped_keychain_user_interaction_allowed.h b/crypto/apple/scoped_keychain_user_interaction_allowed.h
new file mode 100644
index 0000000..c09c694
--- /dev/null
+++ b/crypto/apple/scoped_keychain_user_interaction_allowed.h
@@ -0,0 +1,41 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CRYPTO_APPLE_SCOPED_KEYCHAIN_USER_INTERACTION_ALLOWED_H_
+#define CRYPTO_APPLE_SCOPED_KEYCHAIN_USER_INTERACTION_ALLOWED_H_
+
+#include <MacTypes.h>
+#include <optional>
+
+#include "crypto/crypto_export.h"
+
+namespace crypto::apple {
+
+// Sets whether Keychain Services is permitted to display UI if needed by
+// calling SecKeychainSetUserInteractionAllowed. This operates in a scoped
+// fashion: on destruction, the previous state will be restored. This is useful
+// to interact with the Keychain on a best-effort basis, without displaying any
+// Keychain Services UI (which is beyond the application's control) to the user.
+class CRYPTO_EXPORT ScopedKeychainUserInteractionAllowed {
+ public:
+  ScopedKeychainUserInteractionAllowed(
+      const ScopedKeychainUserInteractionAllowed&) = delete;
+  ScopedKeychainUserInteractionAllowed& operator=(
+      const ScopedKeychainUserInteractionAllowed&) = delete;
+
+  explicit ScopedKeychainUserInteractionAllowed(Boolean allowed,
+                                                OSStatus* status = nullptr);
+
+  ~ScopedKeychainUserInteractionAllowed();
+
+ private:
+  // The previous value of whether user interaction was allowed, for
+  // restoration. If this is nullopt, this scoper did not succeed in its
+  // constructor, so it must not attempt to restore the value.
+  std::optional<Boolean> was_allowed_;
+};
+
+}  // namespace crypto::apple
+
+#endif  // CRYPTO_APPLE_SCOPED_KEYCHAIN_USER_INTERACTION_ALLOWED_H_
diff --git a/device/bluetooth/socket.cc b/device/bluetooth/socket.cc
index 21cf46c..18f3eb20 100644
--- a/device/bluetooth/socket.cc
+++ b/device/bluetooth/socket.cc
@@ -119,7 +119,7 @@
     return;
 
   pending_write_buffer.copy_prefix_from(
-      io_buffer->span().first(base::checked_cast<size_t>(num_bytes_received)));
+      io_buffer->first(base::checked_cast<size_t>(num_bytes_received)));
   receive_stream_->EndWriteData(static_cast<uint32_t>(num_bytes_received));
 
   ReceiveMore();
diff --git a/extensions/browser/api/automation_internal/automation_internal_api.cc b/extensions/browser/api/automation_internal/automation_internal_api.cc
index 9231fd76..bea3ed4 100644
--- a/extensions/browser/api/automation_internal/automation_internal_api.cc
+++ b/extensions/browser/api/automation_internal/automation_internal_api.cc
@@ -291,6 +291,9 @@
     case api::automation::ActionType::kLongClick:
       action->action = ax::mojom::Action::kLongClick;
       break;
+    case api::automation::ActionType::kRequestLayoutBasedAction:
+      action->action = ax::mojom::Action::kRequestLayoutBasedAction;
+      break;
     case api::automation::ActionType::kAnnotatePageImages:
     case api::automation::ActionType::kSignalEndOfTest:
     case api::automation::ActionType::kStitchChildTree:
diff --git a/extensions/browser/api/messaging/message_port.h b/extensions/browser/api/messaging/message_port.h
index 43b85f0..851d6cc 100644
--- a/extensions/browser/api/messaging/message_port.h
+++ b/extensions/browser/api/messaging/message_port.h
@@ -25,7 +25,7 @@
 
 namespace extensions {
 
-struct Message;
+class Message;
 struct MessagingEndpoint;
 struct PortContext;
 
diff --git a/extensions/browser/api/messaging/native_message_port.cc b/extensions/browser/api/messaging/native_message_port.cc
index da827f6..6f387b81 100644
--- a/extensions/browser/api/messaging/native_message_port.cc
+++ b/extensions/browser/api/messaging/native_message_port.cc
@@ -45,7 +45,7 @@
 
 void NativeMessagePort::DispatchOnMessage(const Message& message) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  dispatcher_->DispatchOnMessage(message.data);
+  dispatcher_->DispatchOnMessage(message.data());
 }
 
 void NativeMessagePort::PostMessageFromNativeHost(const std::string& message) {
diff --git a/extensions/browser/api/messaging/native_message_port.h b/extensions/browser/api/messaging/native_message_port.h
index 6d7756a9..33d5bbf 100644
--- a/extensions/browser/api/messaging/native_message_port.h
+++ b/extensions/browser/api/messaging/native_message_port.h
@@ -20,7 +20,7 @@
 namespace extensions {
 class NativeMessageHost;
 class NativeMessagePortDispatcher;
-struct Message;
+class Message;
 struct PortId;
 
 // A port that manages communication with a native application.
diff --git a/extensions/browser/guest_view/web_view/controlled_frame_embedder_url_fetcher.cc b/extensions/browser/guest_view/web_view/controlled_frame_embedder_url_fetcher.cc
index 77b072c..ae72c82 100644
--- a/extensions/browser/guest_view/web_view/controlled_frame_embedder_url_fetcher.cc
+++ b/extensions/browser/guest_view/web_view/controlled_frame_embedder_url_fetcher.cc
@@ -9,6 +9,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/storage_partition.h"
 #include "extensions/browser/extensions_browser_client.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/load_flags.h"
 #include "net/http/http_response_headers.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
diff --git a/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc b/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc
index 082a2439..6f57dd12 100644
--- a/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc
+++ b/extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc
@@ -7,6 +7,7 @@
 #include "base/functional/bind.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_ui_url_loader_factory.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/load_flags.h"
 #include "net/http/http_response_headers.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
diff --git a/extensions/common/BUILD.gn b/extensions/common/BUILD.gn
index 8ceaffc..d85b5aa 100644
--- a/extensions/common/BUILD.gn
+++ b/extensions/common/BUILD.gn
@@ -275,6 +275,7 @@
     "api/declarative_net_request/dnr_manifest_handler.h",
     "api/extension_action/action_info.cc",
     "api/extension_action/action_info.h",
+    "api/messaging/message.cc",
     "api/messaging/message.h",
     "api/messaging/messaging_endpoint.cc",
     "api/messaging/messaging_endpoint.h",
diff --git a/extensions/common/api/automation.idl b/extensions/common/api/automation.idl
index ea91844..90331fcf 100644
--- a/extensions/common/api/automation.idl
+++ b/extensions/common/api/automation.idl
@@ -35,6 +35,7 @@
     clicked,
     collapsed,
     controlsChanged,
+    defaultActionVerbChanged,
     detailsChanged,
     describedByChanged,
     descriptionChanged,
@@ -408,6 +409,7 @@
     loadInlineTextBoxes,
     longClick,
     replaceSelectedText,
+    requestLayoutBasedAction,
     resumeMedia,
     scrollBackward,
     scrollDown,
@@ -544,6 +546,8 @@
     check,
     click,
     clickAncestor,
+    clickInHitTest,
+    clickNotInHitTest,
     jump,
     open,
     press,
diff --git a/extensions/common/api/messaging/message.cc b/extensions/common/api/messaging/message.cc
new file mode 100644
index 0000000..08907d9
--- /dev/null
+++ b/extensions/common/api/messaging/message.cc
@@ -0,0 +1,37 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "extensions/common/api/messaging/message.h"
+
+namespace extensions {
+
+Message::Message() = default;
+
+Message::Message(const std::string& data,
+                 mojom::SerializationFormat format,
+                 bool user_gesture,
+                 bool from_privileged_context)
+    : data_(data),
+      format_(format),
+      user_gesture_(user_gesture),
+      from_privileged_context_(from_privileged_context) {}
+
+Message::Message(const Message& other) = default;
+
+Message::Message(Message&& other) = default;
+
+Message::~Message() = default;
+
+Message& Message::operator=(const Message& other) = default;
+
+Message& Message::operator=(Message&& other) = default;
+
+bool Message::operator==(const Message& other) const {
+  // Skipping the equality check for `from_privileged_context` here
+  // because this field is used only for histograms.
+  return data_ == other.data_ && user_gesture_ == other.user_gesture_ &&
+         format_ == other.format_;
+}
+
+}  // namespace extensions
diff --git a/extensions/common/api/messaging/message.h b/extensions/common/api/messaging/message.h
index 80f1e65..77de5c4a 100644
--- a/extensions/common/api/messaging/message.h
+++ b/extensions/common/api/messaging/message.h
@@ -5,33 +5,39 @@
 #ifndef EXTENSIONS_COMMON_API_MESSAGING_MESSAGE_H_
 #define EXTENSIONS_COMMON_API_MESSAGING_MESSAGE_H_
 
+#include <string>
+
 #include "extensions/common/mojom/message_port.mojom-shared.h"
 
 namespace extensions {
 
 // A message consists of both the data itself as well as a user gesture state.
-struct Message {
-  std::string data;
-  mojom::SerializationFormat format = mojom::SerializationFormat::kJson;
-  bool user_gesture = false;
-  bool from_privileged_context = false;
-
-  Message() = default;
+class Message {
+ public:
+  Message();
   Message(const std::string& data,
           mojom::SerializationFormat format,
           bool user_gesture,
-          bool from_privileged_context = false)
-      : data(data),
-        format(format),
-        user_gesture(user_gesture),
-        from_privileged_context(from_privileged_context) {}
+          bool from_privileged_context = false);
+  Message(const Message& other);
+  Message(Message&& other);
+  ~Message();
 
-  bool operator==(const Message& other) const {
-    // Skipping the equality check for `from_privileged_context` here
-    // because this field is used only for histograms.
-    return data == other.data && user_gesture == other.user_gesture &&
-           format == other.format;
-  }
+  Message& operator=(const Message& other);
+  Message& operator=(Message&& other);
+
+  bool operator==(const Message& other) const;
+
+  const std::string& data() const { return data_; }
+  mojom::SerializationFormat format() const { return format_; }
+  bool user_gesture() const { return user_gesture_; }
+  bool from_privileged_context() const { return from_privileged_context_; }
+
+ private:
+  std::string data_;
+  mojom::SerializationFormat format_ = mojom::SerializationFormat::kJson;
+  bool user_gesture_ = false;
+  bool from_privileged_context_ = false;
 };
 
 }  // namespace extensions
diff --git a/extensions/common/extension_api.cc b/extensions/common/extension_api.cc
index 04a217d..a264e5b 100644
--- a/extensions/common/extension_api.cc
+++ b/extensions/common/extension_api.cc
@@ -218,7 +218,7 @@
     const ContextData& context_data) {
   const Feature* feature = GetFeatureDependency(full_name);
   if (!feature) {
-    return Feature::Availability(Feature::NOT_PRESENT,
+    return Feature::Availability(Feature::AvailabilityResult::kNotPresent,
                                  "Unknown feature: " + std::string(full_name));
   }
 
@@ -309,7 +309,8 @@
     const ContextData& context_data) {
   const std::string& alias = feature.alias();
   if (alias.empty()) {
-    return Feature::Availability(Feature::NOT_PRESENT, "Alias not defined");
+    return Feature::Availability(Feature::AvailabilityResult::kNotPresent,
+                                 "Alias not defined");
   }
 
   auto provider = dependency_providers_.find("api");
diff --git a/extensions/common/features/complex_feature_unittest.cc b/extensions/common/features/complex_feature_unittest.cc
index d7bbe700..a4793c2 100644
--- a/extensions/common/features/complex_feature_unittest.cc
+++ b/extensions/common/features/complex_feature_unittest.cc
@@ -44,7 +44,7 @@
   std::unique_ptr<ComplexFeature> feature(new ComplexFeature(&features));
 
   // Test match 1st rule.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 ->IsAvailableToManifest(kIdFoo, Manifest::Type::kExtension,
                                         ManifestLocation::kInvalidLocation,
@@ -55,7 +55,7 @@
 
   // Test match 2nd rule.
   EXPECT_EQ(
-      Feature::IS_AVAILABLE,
+      Feature::AvailabilityResult::kIsAvailable,
       feature
           ->IsAvailableToManifest(
               kIdBar, Manifest::Type::kLegacyPackagedApp,
@@ -64,7 +64,7 @@
           .result());
 
   // Test allowlist with wrong extension type.
-  EXPECT_NE(Feature::IS_AVAILABLE,
+  EXPECT_NE(Feature::AvailabilityResult::kIsAvailable,
             feature
                 ->IsAvailableToManifest(kIdBar, Manifest::Type::kExtension,
                                         ManifestLocation::kInvalidLocation,
@@ -73,7 +73,7 @@
                                         kUnspecifiedContextId)
                 .result());
   EXPECT_NE(
-      Feature::IS_AVAILABLE,
+      Feature::AvailabilityResult::kIsAvailable,
       feature
           ->IsAvailableToManifest(
               kIdFoo, Manifest::Type::kLegacyPackagedApp,
@@ -104,7 +104,7 @@
   std::unique_ptr<ComplexFeature> feature(new ComplexFeature(&features));
 
   // Available to extensions because of the content_security_policy rule.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 ->IsAvailableToManifest(HashedExtensionId(std::string(32, 'a')),
                                         Manifest::Type::kExtension,
@@ -115,7 +115,7 @@
                 .result());
 
   // Available to platform apps because of the videoCapture rule.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 ->IsAvailableToManifest(HashedExtensionId(std::string(32, 'b')),
                                         Manifest::Type::kPlatformApp,
@@ -126,7 +126,7 @@
                 .result());
 
   // Not available to hosted apps.
-  EXPECT_EQ(Feature::INVALID_TYPE,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidType,
             feature
                 ->IsAvailableToManifest(HashedExtensionId(std::string(32, 'c')),
                                         Manifest::Type::kHostedApp,
@@ -206,7 +206,7 @@
 
     // This feature should be available the second time that the delegated
     // availability check is called.
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               complex_feature
                   .IsAvailableToContext(
                       /*extension=*/nullptr, mojom::ContextType::kUnspecified,
diff --git a/extensions/common/features/feature.h b/extensions/common/features/feature.h
index 2508f2e..334e7af 100644
--- a/extensions/common/features/feature.h
+++ b/extensions/common/features/feature.h
@@ -46,25 +46,27 @@
 
   // Whether a feature is available in a given situation or not, and if not,
   // why not.
-  enum AvailabilityResult {
-    IS_AVAILABLE,
-    NOT_FOUND_IN_ALLOWLIST,
-    INVALID_URL,
-    INVALID_TYPE,
-    INVALID_CONTEXT,
-    INVALID_LOCATION,
-    INVALID_PLATFORM,
-    INVALID_MIN_MANIFEST_VERSION,
-    INVALID_MAX_MANIFEST_VERSION,
-    INVALID_SESSION_TYPE,
-    NOT_PRESENT,
-    UNSUPPORTED_CHANNEL,
-    FOUND_IN_BLOCKLIST,
-    MISSING_COMMAND_LINE_SWITCH,
-    FEATURE_FLAG_DISABLED,
-    REQUIRES_DEVELOPER_MODE,
-    MISSING_DELEGATED_AVAILABILITY_CHECK,
-    FAILED_DELEGATED_AVAILABILITY_CHECK,
+  // Note: do not reorder or remove enum values because the order impacts
+  // result_as_int32() used by V8ContextNativeHandler::GetAvailability().
+  enum class AvailabilityResult {
+    kIsAvailable,
+    kNotFoundInAllowlist,
+    kInvalidUrl,
+    kInvalidType,
+    kInvalidContext,
+    kInvalidLocation,
+    kInvalidPlatform,
+    kInvalidMinManifestVersion,
+    kInvalidMaxManifestVersion,
+    kInvalidSessionType,
+    kNotPresent,
+    kUnsupportedChannel,
+    kFoundInBlocklist,
+    kMissingCommandLineSwitch,
+    kFeatureFlagDisabled,
+    kRequiresDeveloperMode,
+    kMissingDelegatedAvailabilityCheck,
+    kFailedDelegatedAvailabilityCheck
   };
 
   // Shorthand for delegated availability check handler function signature. The
@@ -92,7 +94,11 @@
         : result_(result), message_(message) {}
 
     AvailabilityResult result() const { return result_; }
-    bool is_available() const { return result_ == IS_AVAILABLE; }
+    // Used by V8ContextNativeHandler::GetAvailability().
+    int32_t result_as_int32() const { return static_cast<int32_t>(result_); }
+    bool is_available() const {
+      return result_ == AvailabilityResult::kIsAvailable;
+    }
     const std::string& message() const { return message_; }
 
    private:
diff --git a/extensions/common/features/feature_provider_unittest.cc b/extensions/common/features/feature_provider_unittest.cc
index 68ea2786..5bb9253 100644
--- a/extensions/common/features/feature_provider_unittest.cc
+++ b/extensions/common/features/feature_provider_unittest.cc
@@ -60,7 +60,7 @@
       ExtensionBuilder("test extension").Build();
 
   const Feature* feature = provider->GetFeature("description");
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 ->IsAvailableToContext(extension.get(),
                                        mojom::ContextType::kUnspecified, GURL(),
@@ -70,7 +70,7 @@
   // This is a generic extension, so an app-only feature isn't allowed.
   feature = provider->GetFeature("app.background");
   ASSERT_TRUE(feature);
-  EXPECT_EQ(Feature::INVALID_TYPE,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidType,
             feature
                 ->IsAvailableToContext(extension.get(),
                                        mojom::ContextType::kUnspecified, GURL(),
@@ -80,7 +80,7 @@
   // A feature not listed in the manifest isn't allowed.
   feature = provider->GetFeature("background");
   ASSERT_TRUE(feature);
-  EXPECT_EQ(Feature::NOT_PRESENT,
+  EXPECT_EQ(Feature::AvailabilityResult::kNotPresent,
             feature
                 ->IsAvailableToContext(extension.get(),
                                        mojom::ContextType::kUnspecified, GURL(),
@@ -118,7 +118,7 @@
 
   // A permission requested in the manifest is available.
   const Feature* feature = provider->GetFeature("power");
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 ->IsAvailableToContext(app.get(),
                                        mojom::ContextType::kUnspecified, GURL(),
@@ -126,12 +126,12 @@
                 .result());
 
   // A permission only available to allowlisted extensions returns availability
-  // NOT_FOUND_IN_ALLOWLIST.
+  // AvailabilityResult::kNotFoundInAllowlist.
   // bluetoothPrivate is unsupported in desktop-android build.
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   feature = provider->GetFeature("bluetoothPrivate");
   ASSERT_TRUE(feature);
-  EXPECT_EQ(Feature::NOT_FOUND_IN_ALLOWLIST,
+  EXPECT_EQ(Feature::AvailabilityResult::kNotFoundInAllowlist,
             feature
                 ->IsAvailableToContext(app.get(),
                                        mojom::ContextType::kUnspecified, GURL(),
@@ -139,10 +139,11 @@
                 .result());
 #endif
 
-  // A permission that isn't part of the manifest returns NOT_PRESENT.
+  // A permission that isn't part of the manifest returns
+  // AvailabilityResult::kNotPresent.
   feature = provider->GetFeature("unlimitedStorage");
   ASSERT_TRUE(feature);
-  EXPECT_EQ(Feature::NOT_PRESENT,
+  EXPECT_EQ(Feature::AvailabilityResult::kNotPresent,
             feature
                 ->IsAvailableToContext(app.get(),
                                        mojom::ContextType::kUnspecified, GURL(),
diff --git a/extensions/common/features/manifest_feature.cc b/extensions/common/features/manifest_feature.cc
index 4533fd6..354b1bd 100644
--- a/extensions/common/features/manifest_feature.cc
+++ b/extensions/common/features/manifest_feature.cc
@@ -33,9 +33,10 @@
   // We know we can skip manifest()->GetKey() here because we just did the same
   // validation it would do above.
   if (extension && !extension->manifest()->value()->contains(name()))
-    return CreateAvailability(NOT_PRESENT, extension->GetType());
+    return CreateAvailability(AvailabilityResult::kNotPresent,
+                              extension->GetType());
 
-  return CreateAvailability(IS_AVAILABLE);
+  return CreateAvailability(AvailabilityResult::kIsAvailable);
 }
 
 }  // namespace extensions
diff --git a/extensions/common/features/permission_feature.cc b/extensions/common/features/permission_feature.cc
index f012b69..d46c87d 100644
--- a/extensions/common/features/permission_feature.cc
+++ b/extensions/common/features/permission_feature.cc
@@ -31,9 +31,10 @@
     return availability;
 
   if (extension && !extension->permissions_data()->HasAPIPermission(name()))
-    return CreateAvailability(NOT_PRESENT, extension->GetType());
+    return CreateAvailability(AvailabilityResult::kNotPresent,
+                              extension->GetType());
 
-  return CreateAvailability(IS_AVAILABLE);
+  return CreateAvailability(AvailabilityResult::kIsAvailable);
 }
 
 }  // namespace extensions
diff --git a/extensions/common/features/simple_feature.cc b/extensions/common/features/simple_feature.cc
index 74f269a..31ab718a 100644
--- a/extensions/common/features/simple_feature.cc
+++ b/extensions/common/features/simple_feature.cc
@@ -263,7 +263,8 @@
             ? RunDelegatedAvailabilityCheck(extension, context, url, platform,
                                             context_id, check_developer_mode,
                                             context_data)
-            : CreateAvailability(MISSING_DELEGATED_AVAILABILITY_CHECK);
+            : CreateAvailability(
+                  AvailabilityResult::kMissingDelegatedAvailabilityCheck);
 
     if (!delegated_availibility.is_available()) {
       return delegated_availibility;
@@ -315,24 +316,24 @@
     version_info::Channel channel,
     mojom::FeatureSessionType session_type) const {
   switch (result) {
-    case IS_AVAILABLE:
+    case AvailabilityResult::kIsAvailable:
       return std::string();
-    case NOT_FOUND_IN_ALLOWLIST:
-    case FOUND_IN_BLOCKLIST:
+    case AvailabilityResult::kNotFoundInAllowlist:
+    case AvailabilityResult::kFoundInBlocklist:
       return base::StringPrintf(
           "'%s' is not allowed for specified extension ID.",
           name().c_str());
-    case INVALID_URL:
+    case AvailabilityResult::kInvalidUrl:
       return base::StringPrintf("'%s' is not allowed on %s.",
                                 name().c_str(), url.spec().c_str());
-    case INVALID_TYPE:
+    case AvailabilityResult::kInvalidType:
       return base::StringPrintf(
           "'%s' is only allowed for %s, but this is a %s.",
           name().c_str(),
           ListDisplayNames(std::vector<Manifest::Type>(
               extension_types_.begin(), extension_types_.end())).c_str(),
           GetDisplayName(type).c_str());
-    case INVALID_CONTEXT:
+    case AvailabilityResult::kInvalidContext:
       DCHECK(contexts_);
       return base::StringPrintf(
           "'%s' is only allowed to run in %s, but this is a %s", name().c_str(),
@@ -340,25 +341,25 @@
                                                            contexts_->end()))
               .c_str(),
           GetDisplayName(context).c_str());
-    case INVALID_LOCATION:
+    case AvailabilityResult::kInvalidLocation:
       return base::StringPrintf(
           "'%s' is not allowed for specified install location.",
           name().c_str());
-    case INVALID_PLATFORM:
+    case AvailabilityResult::kInvalidPlatform:
       return base::StringPrintf(
           "'%s' is not allowed for specified platform.",
           name().c_str());
-    case INVALID_MIN_MANIFEST_VERSION:
+    case AvailabilityResult::kInvalidMinManifestVersion:
       DCHECK(min_manifest_version_);
       return base::StringPrintf(
           "'%s' requires manifest version of at least %d.", name().c_str(),
           *min_manifest_version_);
-    case INVALID_MAX_MANIFEST_VERSION:
+    case AvailabilityResult::kInvalidMaxManifestVersion:
       DCHECK(max_manifest_version_);
       return base::StringPrintf(
           "'%s' requires manifest version of %d or lower.", name().c_str(),
           *max_manifest_version_);
-    case INVALID_SESSION_TYPE:
+    case AvailabilityResult::kInvalidSessionType:
       return base::StringPrintf(
           "'%s' is only allowed to run in %s sessions, but this is %s session.",
           name().c_str(),
@@ -366,33 +367,33 @@
                                session_types_.begin(), session_types_.end()))
               .c_str(),
           GetDisplayName(session_type).c_str());
-    case NOT_PRESENT:
+    case AvailabilityResult::kNotPresent:
       return base::StringPrintf(
           "'%s' requires a different Feature that is not present.",
           name().c_str());
-    case UNSUPPORTED_CHANNEL:
+    case AvailabilityResult::kUnsupportedChannel:
       return base::StringPrintf(
           "'%s' requires %s channel or newer, but this is the %s channel.",
           name().c_str(), version_info::GetChannelString(channel).data(),
           version_info::GetChannelString(GetCurrentChannel()).data());
-    case MISSING_COMMAND_LINE_SWITCH:
+    case AvailabilityResult::kMissingCommandLineSwitch:
       DCHECK(command_line_switch_);
       return base::StringPrintf(
           "'%s' requires the '%s' command line switch to be enabled.",
           name().c_str(), command_line_switch_->c_str());
-    case FEATURE_FLAG_DISABLED:
+    case AvailabilityResult::kFeatureFlagDisabled:
       DCHECK(feature_flag_);
       return base::StringPrintf(
           "'%s' requires the '%s' feature flag to be enabled.", name().c_str(),
           feature_flag_->c_str());
-    case REQUIRES_DEVELOPER_MODE:
+    case AvailabilityResult::kRequiresDeveloperMode:
       return base::StringPrintf(
           "'%s' requires the user to have developer mode enabled.",
           name().c_str());
-    case MISSING_DELEGATED_AVAILABILITY_CHECK:
+    case AvailabilityResult::kMissingDelegatedAvailabilityCheck:
       return base::StringPrintf(
           "'%s' is missing its delegated availability check", name().c_str());
-    case FAILED_DELEGATED_AVAILABILITY_CHECK:
+    case AvailabilityResult::kFailedDelegatedAvailabilityCheck:
       return base::StringPrintf("'%s' failed its delegated availability check.",
                                 name().c_str());
   }
@@ -531,12 +532,12 @@
     const Feature* dependency =
         ExtensionAPI::GetSharedInstance()->GetFeatureDependency(dep_name);
     if (!dependency)
-      return CreateAvailability(NOT_PRESENT);
+      return CreateAvailability(AvailabilityResult::kNotPresent);
     Availability dependency_availability = checker.Run(dependency);
     if (!dependency_availability.is_available())
       return dependency_availability;
   }
-  return CreateAvailability(IS_AVAILABLE);
+  return CreateAvailability(AvailabilityResult::kIsAvailable);
 }
 
 // static
@@ -614,7 +615,7 @@
     bool check_developer_mode) const {
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   if (!platforms_.empty() && !base::Contains(platforms_, platform))
-    return CreateAvailability(INVALID_PLATFORM);
+    return CreateAvailability(AvailabilityResult::kInvalidPlatform);
 
   if (channel_ && *channel_ < GetCurrentChannel()) {
     // If the user has the kEnableExperimentalExtensionApis commandline flag
@@ -624,19 +625,21 @@
           command_line->HasSwitch(switches::kEnableExperimentalExtensionApis);
     }
     if (!(*ignore_channel_))
-      return CreateAvailability(UNSUPPORTED_CHANNEL, *channel_);
+      return CreateAvailability(AvailabilityResult::kUnsupportedChannel,
+                                *channel_);
   }
 
   if (command_line_switch_ &&
       !IsCommandLineSwitchEnabled(command_line, *command_line_switch_)) {
-    return CreateAvailability(MISSING_COMMAND_LINE_SWITCH);
+    return CreateAvailability(AvailabilityResult::kMissingCommandLineSwitch);
   }
 
   if (feature_flag_ && !IsFeatureFlagEnabled(*feature_flag_))
-    return CreateAvailability(FEATURE_FLAG_DISABLED);
+    return CreateAvailability(AvailabilityResult::kFeatureFlagDisabled);
 
   if (!MatchesSessionTypes(session_type))
-    return CreateAvailability(INVALID_SESSION_TYPE, session_type);
+    return CreateAvailability(AvailabilityResult::kInvalidSessionType,
+                              session_type);
 
   bool debugger_api_restricted = base::FeatureList::IsEnabled(
       extensions_features::kDebuggerAPIRestrictedToDevMode);
@@ -654,7 +657,7 @@
     // enabled. But if the feature is disabled, then we treat it like any other
     // API.
     if (name() == "debugger" && !debugger_api_restricted) {
-      return CreateAvailability(IS_AVAILABLE);
+      return CreateAvailability(AvailabilityResult::kIsAvailable);
     }
 
     if (name().starts_with("userScripts") &&
@@ -662,13 +665,13 @@
         // userScripts API when feature is enabled.
         base::FeatureList::IsEnabled(
             extensions_features::kUserScriptUserExtensionToggle)) {
-      return CreateAvailability(IS_AVAILABLE);
+      return CreateAvailability(AvailabilityResult::kIsAvailable);
     }
 
-    return CreateAvailability(REQUIRES_DEVELOPER_MODE);
+    return CreateAvailability(AvailabilityResult::kRequiresDeveloperMode);
   }
 
-  return CreateAvailability(IS_AVAILABLE);
+  return CreateAvailability(AvailabilityResult::kIsAvailable);
 }
 
 Feature::Availability SimpleFeature::GetManifestAvailability(
@@ -684,11 +687,11 @@
       (type == Manifest::Type::kUserScript) ? Manifest::Type::kExtension : type;
   if (!extension_types_.empty() &&
       !base::Contains(extension_types_, type_to_check)) {
-    return CreateAvailability(INVALID_TYPE, type);
+    return CreateAvailability(AvailabilityResult::kInvalidType, type);
   }
 
   if (!blocklist_.empty() && IsIdInBlocklist(hashed_id))
-    return CreateAvailability(FOUND_IN_BLOCKLIST);
+    return CreateAvailability(AvailabilityResult::kFoundInBlocklist);
 
   // TODO(benwells): don't grant all component extensions.
   // See http://crbug.com/370375 for more details.
@@ -696,25 +699,25 @@
   // NOTE: Deliberately does not match EXTERNAL_COMPONENT.
   if (component_extensions_auto_granted_ &&
       location == ManifestLocation::kComponent)
-    return CreateAvailability(IS_AVAILABLE);
+    return CreateAvailability(AvailabilityResult::kIsAvailable);
 
   if (!allowlist_.empty() && !IsIdInAllowlist(hashed_id) &&
       !IsAllowlistedForTest(hashed_id)) {
-    return CreateAvailability(NOT_FOUND_IN_ALLOWLIST);
+    return CreateAvailability(AvailabilityResult::kNotFoundInAllowlist);
   }
 
   if (location_ && !MatchesManifestLocation(location) &&
       !IsAllowlistedForTest(hashed_id)) {
-    return CreateAvailability(INVALID_LOCATION);
+    return CreateAvailability(AvailabilityResult::kInvalidLocation);
   }
 
   if (min_manifest_version_ && manifest_version < *min_manifest_version_)
-    return CreateAvailability(INVALID_MIN_MANIFEST_VERSION);
+    return CreateAvailability(AvailabilityResult::kInvalidMinManifestVersion);
 
   if (max_manifest_version_ && manifest_version > *max_manifest_version_)
-    return CreateAvailability(INVALID_MAX_MANIFEST_VERSION);
+    return CreateAvailability(AvailabilityResult::kInvalidMaxManifestVersion);
 
-  return CreateAvailability(IS_AVAILABLE);
+  return CreateAvailability(AvailabilityResult::kIsAvailable);
 }
 
 Feature::Availability SimpleFeature::GetContextAvailability(
@@ -726,7 +729,7 @@
   // "active" in current renderer process when the API permission check is
   // done.
   if (contexts_ && !base::Contains(*contexts_, context))
-    return CreateAvailability(INVALID_CONTEXT, context);
+    return CreateAvailability(AvailabilityResult::kInvalidContext, context);
 
   // TODO(kalman): Consider checking |matches_| regardless of context type.
   // Fewer surprises, and if the feature configuration wants to isolate
@@ -737,13 +740,13 @@
       context == mojom::ContextType::kWebUi ||
       context == mojom::ContextType::kUntrustedWebUi;
   if (supports_url_matching && !matches_.MatchesURL(url)) {
-    return CreateAvailability(INVALID_URL, url);
+    return CreateAvailability(AvailabilityResult::kInvalidUrl, url);
   }
 
   if (is_for_service_worker && disallow_for_service_workers_)
-    return CreateAvailability(INVALID_CONTEXT);
+    return CreateAvailability(AvailabilityResult::kInvalidContext);
 
-  return CreateAvailability(IS_AVAILABLE);
+  return CreateAvailability(AvailabilityResult::kIsAvailable);
 }
 
 Feature::Availability SimpleFeature::RunDelegatedAvailabilityCheck(
@@ -759,9 +762,10 @@
   if (!delegated_availability_check_handler_.Run(
           name_, extension, context, url, platform, context_id,
           check_developer_mode, context_data)) {
-    return CreateAvailability(FAILED_DELEGATED_AVAILABILITY_CHECK);
+    return CreateAvailability(
+        AvailabilityResult::kFailedDelegatedAvailabilityCheck);
   }
-  return CreateAvailability(IS_AVAILABLE);
+  return CreateAvailability(AvailabilityResult::kIsAvailable);
 }
 
 }  // namespace extensions
diff --git a/extensions/common/features/simple_feature_unittest.cc b/extensions/common/features/simple_feature_unittest.cc
index e703a63..48c9f9a 100644
--- a/extensions/common/features/simple_feature_unittest.cc
+++ b/extensions/common/features/simple_feature_unittest.cc
@@ -96,7 +96,7 @@
                                    -1, Feature::UNSPECIFIED_PLATFORM,
                                    kUnspecifiedContextId)
             .result();
-    return availability_result == Feature::IS_AVAILABLE;
+    return availability_result == Feature::AvailabilityResult::kIsAvailable;
   }
 
  private:
@@ -107,25 +107,25 @@
   const auto tests = std::to_array<IsAvailableTestData>({
       {"", Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation,
        Feature::UNSPECIFIED_PLATFORM, -1, kUnspecifiedContextId,
-       Feature::IS_AVAILABLE},
+       Feature::AvailabilityResult::kIsAvailable},
       {"random-extension", Manifest::Type::kUnknown,
        ManifestLocation::kInvalidLocation, Feature::UNSPECIFIED_PLATFORM, -1,
-       kUnspecifiedContextId, Feature::IS_AVAILABLE},
+       kUnspecifiedContextId, Feature::AvailabilityResult::kIsAvailable},
       {"", Manifest::Type::kLegacyPackagedApp,
        ManifestLocation::kInvalidLocation, Feature::UNSPECIFIED_PLATFORM, -1,
-       kUnspecifiedContextId, Feature::IS_AVAILABLE},
+       kUnspecifiedContextId, Feature::AvailabilityResult::kIsAvailable},
       {"", Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation,
        Feature::UNSPECIFIED_PLATFORM, -1, kUnspecifiedContextId,
-       Feature::IS_AVAILABLE},
+       Feature::AvailabilityResult::kIsAvailable},
       {"", Manifest::Type::kUnknown, ManifestLocation::kComponent,
        Feature::UNSPECIFIED_PLATFORM, -1, kUnspecifiedContextId,
-       Feature::IS_AVAILABLE},
+       Feature::AvailabilityResult::kIsAvailable},
       {"", Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation,
        Feature::CHROMEOS_PLATFORM, -1, kUnspecifiedContextId,
-       Feature::IS_AVAILABLE},
+       Feature::AvailabilityResult::kIsAvailable},
       {"", Manifest::Type::kUnknown, ManifestLocation::kInvalidLocation,
        Feature::UNSPECIFIED_PLATFORM, 25, kUnspecifiedContextId,
-       Feature::IS_AVAILABLE},
+       Feature::AvailabilityResult::kIsAvailable},
   });
 
   SimpleFeature feature;
@@ -147,14 +147,14 @@
   SimpleFeature feature;
   feature.set_allowlist({kIdFoo.value().c_str(), kIdBar.value().c_str()});
 
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(kIdFoo, Manifest::Type::kUnknown,
                                        ManifestLocation::kInvalidLocation, -1,
                                        Feature::UNSPECIFIED_PLATFORM,
                                        kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(kIdBar, Manifest::Type::kUnknown,
                                        ManifestLocation::kInvalidLocation, -1,
@@ -162,14 +162,14 @@
                                        kUnspecifiedContextId)
                 .result());
 
-  EXPECT_EQ(Feature::NOT_FOUND_IN_ALLOWLIST,
+  EXPECT_EQ(Feature::AvailabilityResult::kNotFoundInAllowlist,
             feature
                 .IsAvailableToManifest(kIdBaz, Manifest::Type::kUnknown,
                                        ManifestLocation::kInvalidLocation, -1,
                                        Feature::UNSPECIFIED_PLATFORM,
                                        kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::NOT_FOUND_IN_ALLOWLIST,
+  EXPECT_EQ(Feature::AvailabilityResult::kNotFoundInAllowlist,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
@@ -178,7 +178,7 @@
                 .result());
 
   feature.set_extension_types({Manifest::Type::kLegacyPackagedApp});
-  EXPECT_EQ(Feature::NOT_FOUND_IN_ALLOWLIST,
+  EXPECT_EQ(Feature::AvailabilityResult::kNotFoundInAllowlist,
             feature
                 .IsAvailableToManifest(
                     kIdBaz, Manifest::Type::kLegacyPackagedApp,
@@ -196,14 +196,14 @@
 
   feature.set_allowlist({kIdFooHashed.c_str()});
 
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(kIdFoo), Manifest::Type::kUnknown,
                     ManifestLocation::kInvalidLocation, -1,
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
-  EXPECT_NE(Feature::IS_AVAILABLE,
+  EXPECT_NE(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(kIdFooHashed), Manifest::Type::kUnknown,
@@ -211,7 +211,7 @@
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
   EXPECT_EQ(
-      Feature::NOT_FOUND_IN_ALLOWLIST,
+      Feature::AvailabilityResult::kNotFoundInAllowlist,
       feature
           .IsAvailableToManifest(
               HashedExtensionId("slightlytoooolongforanextensionid"),
@@ -219,7 +219,7 @@
               Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
           .result());
   EXPECT_EQ(
-      Feature::NOT_FOUND_IN_ALLOWLIST,
+      Feature::AvailabilityResult::kNotFoundInAllowlist,
       feature
           .IsAvailableToManifest(
               HashedExtensionId("tooshortforanextensionid"),
@@ -235,14 +235,14 @@
   SimpleFeature feature;
   feature.set_blocklist({kIdFoo.value().c_str(), kIdBar.value().c_str()});
 
-  EXPECT_EQ(Feature::FOUND_IN_BLOCKLIST,
+  EXPECT_EQ(Feature::AvailabilityResult::kFoundInBlocklist,
             feature
                 .IsAvailableToManifest(kIdFoo, Manifest::Type::kUnknown,
                                        ManifestLocation::kInvalidLocation, -1,
                                        Feature::UNSPECIFIED_PLATFORM,
                                        kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::FOUND_IN_BLOCKLIST,
+  EXPECT_EQ(Feature::AvailabilityResult::kFoundInBlocklist,
             feature
                 .IsAvailableToManifest(kIdBar, Manifest::Type::kUnknown,
                                        ManifestLocation::kInvalidLocation, -1,
@@ -250,14 +250,14 @@
                                        kUnspecifiedContextId)
                 .result());
 
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(kIdBaz, Manifest::Type::kUnknown,
                                        ManifestLocation::kInvalidLocation, -1,
                                        Feature::UNSPECIFIED_PLATFORM,
                                        kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
@@ -275,14 +275,14 @@
 
   feature.set_blocklist({kIdFooHashed.c_str()});
 
-  EXPECT_EQ(Feature::FOUND_IN_BLOCKLIST,
+  EXPECT_EQ(Feature::AvailabilityResult::kFoundInBlocklist,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(kIdFoo), Manifest::Type::kUnknown,
                     ManifestLocation::kInvalidLocation, -1,
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
-  EXPECT_NE(Feature::FOUND_IN_BLOCKLIST,
+  EXPECT_NE(Feature::AvailabilityResult::kFoundInBlocklist,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(kIdFooHashed), Manifest::Type::kUnknown,
@@ -290,7 +290,7 @@
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
   EXPECT_EQ(
-      Feature::IS_AVAILABLE,
+      Feature::AvailabilityResult::kIsAvailable,
       feature
           .IsAvailableToManifest(
               HashedExtensionId("slightlytoooolongforanextensionid"),
@@ -298,7 +298,7 @@
               Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
           .result());
   EXPECT_EQ(
-      Feature::IS_AVAILABLE,
+      Feature::AvailabilityResult::kIsAvailable,
       feature
           .IsAvailableToManifest(
               HashedExtensionId("tooshortforanextensionid"),
@@ -312,14 +312,14 @@
   feature.set_extension_types(
       {Manifest::Type::kExtension, Manifest::Type::kLegacyPackagedApp});
 
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kExtension,
                     ManifestLocation::kInvalidLocation, -1,
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kLegacyPackagedApp,
@@ -327,14 +327,14 @@
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
 
-  EXPECT_EQ(Feature::INVALID_TYPE,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidType,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
                     ManifestLocation::kInvalidLocation, -1,
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::INVALID_TYPE,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidType,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kTheme,
@@ -366,7 +366,7 @@
   ASSERT_TRUE(extension.get());
 
   feature.set_allowlist({"monkey"});
-  EXPECT_EQ(Feature::NOT_FOUND_IN_ALLOWLIST,
+  EXPECT_EQ(Feature::AvailabilityResult::kNotFoundInAllowlist,
             feature
                 .IsAvailableToContext(extension.get(),
                                       mojom::ContextType::kPrivilegedExtension,
@@ -380,7 +380,7 @@
     Feature::Availability availability = feature.IsAvailableToContext(
         extension.get(), mojom::ContextType::kPrivilegedExtension,
         Feature::CHROMEOS_PLATFORM, kUnspecifiedContextId, TestContextData());
-    EXPECT_EQ(Feature::INVALID_TYPE, availability.result());
+    EXPECT_EQ(Feature::AvailabilityResult::kInvalidType, availability.result());
     EXPECT_EQ("'somefeature' is only allowed for themes, "
               "but this is a legacy packaged app.",
               availability.message());
@@ -393,7 +393,8 @@
     Feature::Availability availability = feature.IsAvailableToContext(
         extension.get(), mojom::ContextType::kPrivilegedExtension,
         Feature::CHROMEOS_PLATFORM, kUnspecifiedContextId, TestContextData());
-    EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result());
+    EXPECT_EQ(Feature::AvailabilityResult::kInvalidContext,
+              availability.result());
     EXPECT_EQ("'somefeature' is only allowed to run in extension iframes and "
               "content scripts, but this is a privileged page",
               availability.message());
@@ -406,7 +407,8 @@
     Feature::Availability availability = feature.IsAvailableToContext(
         extension.get(), mojom::ContextType::kPrivilegedExtension,
         Feature::CHROMEOS_PLATFORM, kUnspecifiedContextId, TestContextData());
-    EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result());
+    EXPECT_EQ(Feature::AvailabilityResult::kInvalidContext,
+              availability.result());
     EXPECT_EQ("'somefeature' is only allowed to run in extension iframes, "
               "content scripts, and web pages, but this is a privileged page",
               availability.message());
@@ -415,7 +417,7 @@
   {
     SimpleFeature other_feature;
     other_feature.set_location(SimpleFeature::COMPONENT_LOCATION);
-    EXPECT_EQ(Feature::INVALID_LOCATION,
+    EXPECT_EQ(Feature::AvailabilityResult::kInvalidLocation,
               other_feature
                   .IsAvailableToContext(
                       extension.get(), mojom::ContextType::kPrivilegedExtension,
@@ -425,7 +427,7 @@
   }
 
   feature.set_contexts({mojom::ContextType::kPrivilegedExtension});
-  EXPECT_EQ(Feature::INVALID_PLATFORM,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidPlatform,
             feature
                 .IsAvailableToContext(extension.get(),
                                       mojom::ContextType::kPrivilegedExtension,
@@ -434,7 +436,7 @@
                 .result());
 
   feature.set_min_manifest_version(22);
-  EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidMinManifestVersion,
             feature
                 .IsAvailableToContext(extension.get(),
                                       mojom::ContextType::kPrivilegedExtension,
@@ -444,7 +446,7 @@
   feature.set_min_manifest_version(21);
 
   feature.set_max_manifest_version(18);
-  EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidMaxManifestVersion,
             feature
                 .IsAvailableToContext(extension.get(),
                                       mojom::ContextType::kPrivilegedExtension,
@@ -470,78 +472,78 @@
 
   const auto kTestData = std::to_array<FeatureSessionTypeTestData>({
       {"kiosk_feature in kiosk session",
-       Feature::IS_AVAILABLE,
+       Feature::AvailabilityResult::kIsAvailable,
        mojom::FeatureSessionType::kKiosk,
        {mojom::FeatureSessionType::kKiosk}},
       {"kiosk feature in regular session",
-       Feature::INVALID_SESSION_TYPE,
+       Feature::AvailabilityResult::kInvalidSessionType,
        mojom::FeatureSessionType::kRegular,
        {mojom::FeatureSessionType::kKiosk}},
       {"kiosk feature in unknown session",
-       Feature::INVALID_SESSION_TYPE,
+       Feature::AvailabilityResult::kInvalidSessionType,
        mojom::FeatureSessionType::kUnknown,
        {mojom::FeatureSessionType::kKiosk}},
       {"kiosk feature in initial session",
-       Feature::INVALID_SESSION_TYPE,
+       Feature::AvailabilityResult::kInvalidSessionType,
        mojom::FeatureSessionType::kInitial,
        {mojom::FeatureSessionType::kKiosk}},
       {"non kiosk feature in kiosk session",
-       Feature::INVALID_SESSION_TYPE,
+       Feature::AvailabilityResult::kInvalidSessionType,
        mojom::FeatureSessionType::kKiosk,
        {mojom::FeatureSessionType::kRegular}},
       {"non kiosk feature in regular session",
-       Feature::IS_AVAILABLE,
+       Feature::AvailabilityResult::kIsAvailable,
        mojom::FeatureSessionType::kRegular,
        {mojom::FeatureSessionType::kRegular}},
       {"non kiosk feature in unknown session",
-       Feature::INVALID_SESSION_TYPE,
+       Feature::AvailabilityResult::kInvalidSessionType,
        mojom::FeatureSessionType::kUnknown,
        {mojom::FeatureSessionType::kRegular}},
       {"non kiosk feature in initial session",
-       Feature::INVALID_SESSION_TYPE,
+       Feature::AvailabilityResult::kInvalidSessionType,
        mojom::FeatureSessionType::kInitial,
        {mojom::FeatureSessionType::kRegular}},
       {"session agnostic feature in kiosk session",
-       Feature::IS_AVAILABLE,
+       Feature::AvailabilityResult::kIsAvailable,
        mojom::FeatureSessionType::kKiosk,
        {}},
       {"session agnostic feature in auto-launched kiosk session",
-       Feature::IS_AVAILABLE,
+       Feature::AvailabilityResult::kIsAvailable,
        mojom::FeatureSessionType::kAutolaunchedKiosk,
        {}},
       {"session agnostic feature in regular session",
-       Feature::IS_AVAILABLE,
+       Feature::AvailabilityResult::kIsAvailable,
        mojom::FeatureSessionType::kRegular,
        {}},
       {"session agnostic feature in unknown session",
-       Feature::IS_AVAILABLE,
+       Feature::AvailabilityResult::kIsAvailable,
        mojom::FeatureSessionType::kUnknown,
        {}},
       {"feature with multiple session types",
-       Feature::IS_AVAILABLE,
+       Feature::AvailabilityResult::kIsAvailable,
        mojom::FeatureSessionType::kRegular,
        {mojom::FeatureSessionType::kRegular,
         mojom::FeatureSessionType::kKiosk}},
       {"feature with multiple session types in unknown session",
-       Feature::INVALID_SESSION_TYPE,
+       Feature::AvailabilityResult::kInvalidSessionType,
        mojom::FeatureSessionType::kUnknown,
        {mojom::FeatureSessionType::kRegular,
         mojom::FeatureSessionType::kKiosk}},
       {"feature with multiple session types in initial session",
-       Feature::INVALID_SESSION_TYPE,
+       Feature::AvailabilityResult::kInvalidSessionType,
        mojom::FeatureSessionType::kInitial,
        {mojom::FeatureSessionType::kRegular,
         mojom::FeatureSessionType::kKiosk}},
       {"feature with auto-launched kiosk session type in regular session",
-       Feature::INVALID_SESSION_TYPE,
+       Feature::AvailabilityResult::kInvalidSessionType,
        mojom::FeatureSessionType::kAutolaunchedKiosk,
        {mojom::FeatureSessionType::kRegular}},
       {"feature with auto-launched kiosk session type in auto-launched kiosk",
-       Feature::IS_AVAILABLE,
+       Feature::AvailabilityResult::kIsAvailable,
        mojom::FeatureSessionType::kAutolaunchedKiosk,
        {mojom::FeatureSessionType::kAutolaunchedKiosk}},
       {"feature with kiosk session type in auto-launched kiosk session",
-       Feature::IS_AVAILABLE,
+       Feature::AvailabilityResult::kIsAvailable,
        mojom::FeatureSessionType::kAutolaunchedKiosk,
        {mojom::FeatureSessionType::kKiosk}},
   });
@@ -632,14 +634,14 @@
 TEST_F(SimpleFeatureTest, Platform) {
   SimpleFeature feature;
   feature.set_platforms({Feature::CHROMEOS_PLATFORM});
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
                     ManifestLocation::kInvalidLocation, -1,
                     Feature::CHROMEOS_PLATFORM, kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::INVALID_PLATFORM,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidPlatform,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
@@ -652,14 +654,14 @@
   SimpleFeature feature;
   feature.set_min_manifest_version(5);
 
-  EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidMinManifestVersion,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
                     ManifestLocation::kInvalidLocation, 0,
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidMinManifestVersion,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
@@ -667,14 +669,14 @@
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
 
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
                     ManifestLocation::kInvalidLocation, 5,
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
@@ -684,21 +686,21 @@
 
   feature.set_max_manifest_version(8);
 
-  EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidMaxManifestVersion,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
                     ManifestLocation::kInvalidLocation, 10,
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
                     ManifestLocation::kInvalidLocation, 8,
                     Feature::UNSPECIFIED_PLATFORM, kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToManifest(
                     HashedExtensionId(), Manifest::Type::kUnknown,
@@ -711,39 +713,39 @@
   SimpleFeature feature;
   feature.set_command_line_switch("laser-beams");
   {
-    EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH,
+    EXPECT_EQ(Feature::AvailabilityResult::kMissingCommandLineSwitch,
               feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
   }
   {
     base::test::ScopedCommandLine scoped_command_line;
     scoped_command_line.GetProcessCommandLine()->AppendSwitch("laser-beams");
-    EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH,
+    EXPECT_EQ(Feature::AvailabilityResult::kMissingCommandLineSwitch,
               feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
   }
   {
     base::test::ScopedCommandLine scoped_command_line;
     scoped_command_line.GetProcessCommandLine()->AppendSwitch(
         "enable-laser-beams");
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
   }
   {
     base::test::ScopedCommandLine scoped_command_line;
     scoped_command_line.GetProcessCommandLine()->AppendSwitch(
         "disable-laser-beams");
-    EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH,
+    EXPECT_EQ(Feature::AvailabilityResult::kMissingCommandLineSwitch,
               feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
   }
   {
     base::test::ScopedCommandLine scoped_command_line;
     scoped_command_line.GetProcessCommandLine()->AppendSwitch("laser-beams=1");
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
   }
   {
     base::test::ScopedCommandLine scoped_command_line;
     scoped_command_line.GetProcessCommandLine()->AppendSwitch("laser-beams=0");
-    EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH,
+    EXPECT_EQ(Feature::AvailabilityResult::kMissingCommandLineSwitch,
               feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
   }
 }
@@ -759,13 +761,13 @@
 
   SimpleFeature simple_feature_1;
   simple_feature_1.set_feature_flag(kStubFeature1.name);
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             simple_feature_1.IsAvailableToEnvironment(kUnspecifiedContextId)
                 .result());
 
   SimpleFeature simple_feature_2;
   simple_feature_2.set_feature_flag(kStubFeature2.name);
-  EXPECT_EQ(Feature::FEATURE_FLAG_DISABLED,
+  EXPECT_EQ(Feature::AvailabilityResult::kFeatureFlagDisabled,
             simple_feature_2.IsAvailableToEnvironment(kUnspecifiedContextId)
                 .result());
 
@@ -773,10 +775,10 @@
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitWithFeatures({kStubFeature2} /* enabled_features */,
                                        {kStubFeature1} /* disabled_features */);
-  EXPECT_EQ(Feature::FEATURE_FLAG_DISABLED,
+  EXPECT_EQ(Feature::AvailabilityResult::kFeatureFlagDisabled,
             simple_feature_1.IsAvailableToEnvironment(kUnspecifiedContextId)
                 .result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             simple_feature_2.IsAvailableToEnvironment(kUnspecifiedContextId)
                 .result());
 }
@@ -785,76 +787,76 @@
 // compute feature availability.
 TEST_F(SimpleFeatureTest, SupportedChannel) {
   // stable supported.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::STABLE, Channel::UNKNOWN));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::STABLE, Channel::CANARY));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::STABLE, Channel::DEV));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::STABLE, Channel::BETA));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::STABLE, Channel::STABLE));
 
   // beta supported.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::BETA, Channel::UNKNOWN));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::BETA, Channel::CANARY));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::BETA, Channel::DEV));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::BETA, Channel::BETA));
-  EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+  EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
             IsAvailableInChannel(Channel::BETA, Channel::STABLE));
 
   // dev supported.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::DEV, Channel::UNKNOWN));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::DEV, Channel::CANARY));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::DEV, Channel::DEV));
-  EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+  EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
             IsAvailableInChannel(Channel::DEV, Channel::BETA));
-  EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+  EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
             IsAvailableInChannel(Channel::DEV, Channel::STABLE));
 
   // canary supported.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::CANARY, Channel::UNKNOWN));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::CANARY, Channel::CANARY));
-  EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+  EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
             IsAvailableInChannel(Channel::CANARY, Channel::DEV));
-  EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+  EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
             IsAvailableInChannel(Channel::CANARY, Channel::BETA));
-  EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+  EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
             IsAvailableInChannel(Channel::CANARY, Channel::STABLE));
 
   // trunk supported.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(Channel::UNKNOWN, Channel::UNKNOWN));
-  EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+  EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
             IsAvailableInChannel(Channel::UNKNOWN, Channel::CANARY));
-  EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+  EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
             IsAvailableInChannel(Channel::UNKNOWN, Channel::DEV));
-  EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+  EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
             IsAvailableInChannel(Channel::UNKNOWN, Channel::BETA));
-  EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+  EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
             IsAvailableInChannel(Channel::UNKNOWN, Channel::STABLE));
 
   // Verify that a feature without a channel specified is available in all
   // channels.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(std::nullopt, Channel::UNKNOWN));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(std::nullopt, Channel::CANARY));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(std::nullopt, Channel::DEV));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(std::nullopt, Channel::BETA));
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             IsAvailableInChannel(std::nullopt, Channel::STABLE));
 }
 
@@ -881,14 +883,14 @@
   const HashedExtensionId kId2(std::string(32, 'b'));
   {
     ScopedCurrentChannel current_channel(Channel::BETA);
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               feature
                   ->IsAvailableToManifest(kId1, Manifest::Type::kExtension,
                                           ManifestLocation::kInvalidLocation,
                                           Feature::UNSPECIFIED_PLATFORM,
                                           kUnspecifiedContextId)
                   .result());
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               feature
                   ->IsAvailableToManifest(
                       kId2, Manifest::Type::kLegacyPackagedApp,
@@ -898,14 +900,14 @@
   }
   {
     ScopedCurrentChannel current_channel(Channel::STABLE);
-    EXPECT_NE(Feature::IS_AVAILABLE,
+    EXPECT_NE(Feature::AvailabilityResult::kIsAvailable,
               feature
                   ->IsAvailableToManifest(kId1, Manifest::Type::kExtension,
                                           ManifestLocation::kInvalidLocation,
                                           Feature::UNSPECIFIED_PLATFORM,
                                           kUnspecifiedContextId)
                   .result());
-    EXPECT_NE(Feature::IS_AVAILABLE,
+    EXPECT_NE(Feature::AvailabilityResult::kIsAvailable,
               feature
                   ->IsAvailableToManifest(
                       kId2, Manifest::Type::kLegacyPackagedApp,
@@ -938,7 +940,7 @@
   Feature* feature = static_cast<Feature*>(complex_feature.get());
   {
     ScopedCurrentChannel current_channel(Channel::UNKNOWN);
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               feature
                   ->IsAvailableToManifest(kId1, Manifest::Type::kExtension,
                                           ManifestLocation::kInvalidLocation,
@@ -948,7 +950,7 @@
   }
   {
     ScopedCurrentChannel current_channel(Channel::BETA);
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               feature
                   ->IsAvailableToManifest(
                       kId2, Manifest::Type::kLegacyPackagedApp,
@@ -958,7 +960,7 @@
   }
   {
     ScopedCurrentChannel current_channel(Channel::BETA);
-    EXPECT_NE(Feature::IS_AVAILABLE,
+    EXPECT_NE(Feature::AvailabilityResult::kIsAvailable,
               feature
                   ->IsAvailableToManifest(kId1, Manifest::Type::kExtension,
                                           ManifestLocation::kInvalidLocation,
@@ -992,7 +994,7 @@
   {
     // Test a feature that requires a delegated availability check but is
     // missing the check handler.
-    EXPECT_EQ(Feature::MISSING_DELEGATED_AVAILABILITY_CHECK,
+    EXPECT_EQ(Feature::AvailabilityResult::kMissingDelegatedAvailabilityCheck,
               feature
                   .IsAvailableToContext(
                       /*extension=*/nullptr, mojom::ContextType::kWebPage,
@@ -1005,7 +1007,7 @@
   {
     // Test a feature that requires a delegated availability check and the check
     // is not successful.
-    EXPECT_EQ(Feature::FAILED_DELEGATED_AVAILABILITY_CHECK,
+    EXPECT_EQ(Feature::AvailabilityResult::kFailedDelegatedAvailabilityCheck,
               feature
                   .IsAvailableToContext(
                       /*extension=*/nullptr, mojom::ContextType::kWebPage,
@@ -1019,7 +1021,7 @@
   {
     // Test a feature that requires a delegated availability check and the check
     // is successful.
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               feature
                   .IsAvailableToContext(
                       /*extension=*/nullptr, mojom::ContextType::kWebPage,
@@ -1034,7 +1036,7 @@
     // would be successful, but actually isn't called since the environment
     // check fails.
     ScopedCurrentChannel current_channel(Channel::STABLE);
-    EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+    EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
               feature
                   .IsAvailableToContext(
                       /*extension=*/nullptr, mojom::ContextType::kWebPage,
@@ -1048,7 +1050,7 @@
     // would be successful, then confirm the check is called because the
     // environment check passes.
     ScopedCurrentChannel current_channel(Channel::STABLE);
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               feature
                   .IsAvailableToContext(
                       /*extension=*/nullptr, mojom::ContextType::kWebPage,
@@ -1061,7 +1063,7 @@
   {
     // Test a feature that requires a delegated availability check and the check
     // would be successful, but the URL is not contained in the matchlist.
-    EXPECT_EQ(Feature::INVALID_URL,
+    EXPECT_EQ(Feature::AvailabilityResult::kInvalidUrl,
               feature
                   .IsAvailableToContext(
                       /*extension=*/nullptr, mojom::ContextType::kWebPage,
@@ -1085,7 +1087,7 @@
   {
     // It should be available on trunk.
     ScopedCurrentChannel current_channel(Channel::UNKNOWN);
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               feature
                   .IsAvailableToContext(nullptr, mojom::ContextType::kWebUi,
                                         kAllowlistedUrl, kUnspecifiedContextId,
@@ -1095,7 +1097,7 @@
   {
     // It should be unavailable on beta.
     ScopedCurrentChannel current_channel(Channel::BETA);
-    EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
+    EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel,
               feature
                   .IsAvailableToContext(nullptr, mojom::ContextType::kWebUi,
                                         kAllowlistedUrl, kUnspecifiedContextId,
@@ -1112,7 +1114,7 @@
     feature.set_min_manifest_version(2);
     feature.set_extension_types({Manifest::Type::kExtension});
     feature.set_contexts({mojom::ContextType::kPrivilegedExtension});
-    EXPECT_EQ(Feature::IS_AVAILABLE,
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
               feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
   }
 
@@ -1123,13 +1125,13 @@
     {
       ScopedCurrentChannel current_channel(Channel::BETA);
       EXPECT_EQ(
-          Feature::IS_AVAILABLE,
+          Feature::AvailabilityResult::kIsAvailable,
           feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
     }
     {
       ScopedCurrentChannel current_channel(Channel::STABLE);
       EXPECT_EQ(
-          Feature::UNSUPPORTED_CHANNEL,
+          Feature::AvailabilityResult::kUnsupportedChannel,
           feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
     }
   }
@@ -1140,14 +1142,14 @@
     SimpleFeature feature;
     feature.set_command_line_switch(kFakeSwitch);
 
-    EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH,
+    EXPECT_EQ(Feature::AvailabilityResult::kMissingCommandLineSwitch,
               feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
     {
       base::test::ScopedCommandLine command_line;
       command_line.GetProcessCommandLine()->AppendSwitch(
           base::StringPrintf("enable-%s", kFakeSwitch));
       EXPECT_EQ(
-          Feature::IS_AVAILABLE,
+          Feature::AvailabilityResult::kIsAvailable,
           feature.IsAvailableToEnvironment(kUnspecifiedContextId).result());
     }
   }
@@ -1167,14 +1169,14 @@
 
   {
     base::test::ScopedCommandLine scoped_command_line;
-    EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, test_feature());
+    EXPECT_EQ(Feature::AvailabilityResult::kUnsupportedChannel, test_feature());
   }
 
   {
     base::test::ScopedCommandLine scoped_command_line;
     scoped_command_line.GetProcessCommandLine()->AppendSwitch(
         switches::kEnableExperimentalExtensionApis);
-    EXPECT_EQ(Feature::IS_AVAILABLE, test_feature());
+    EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable, test_feature());
   }
 }
 
@@ -1189,30 +1191,30 @@
   // should be available if and only if the user is in dev mode.
   SetCurrentDeveloperMode(kContextId1, true);
   EXPECT_EQ(
-      Feature::IS_AVAILABLE,
+      Feature::AvailabilityResult::kIsAvailable,
       dev_mode_only_feature.IsAvailableToEnvironment(kContextId1).result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             other_feature.IsAvailableToEnvironment(kContextId1).result());
 
   SetCurrentDeveloperMode(kContextId1, false);
   EXPECT_EQ(
-      Feature::REQUIRES_DEVELOPER_MODE,
+      Feature::AvailabilityResult::kRequiresDeveloperMode,
       dev_mode_only_feature.IsAvailableToEnvironment(kContextId1).result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             other_feature.IsAvailableToEnvironment(kContextId1).result());
 
   SetCurrentDeveloperMode(kContextId2, true);
   EXPECT_EQ(
-      Feature::IS_AVAILABLE,
+      Feature::AvailabilityResult::kIsAvailable,
       dev_mode_only_feature.IsAvailableToEnvironment(kContextId2).result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             other_feature.IsAvailableToEnvironment(kContextId2).result());
 
   SetCurrentDeveloperMode(kContextId2, false);
   EXPECT_EQ(
-      Feature::REQUIRES_DEVELOPER_MODE,
+      Feature::AvailabilityResult::kRequiresDeveloperMode,
       dev_mode_only_feature.IsAvailableToEnvironment(kContextId2).result());
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             other_feature.IsAvailableToEnvironment(kContextId2).result());
 }
 
@@ -1230,7 +1232,7 @@
   EXPECT_TRUE(BackgroundInfo::IsServiceWorkerBased(extension.get()));
 
   // Expect the feature is allowed, since the default is to allow.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToContext(
                     extension.get(), mojom::ContextType::kPrivilegedExtension,
@@ -1242,7 +1244,7 @@
 
   // Check with a different script file, which should return available,
   // since it's not a service worker context.
-  EXPECT_EQ(Feature::IS_AVAILABLE,
+  EXPECT_EQ(Feature::AvailabilityResult::kIsAvailable,
             feature
                 .IsAvailableToContext(extension.get(),
                                       mojom::ContextType::kPrivilegedExtension,
@@ -1253,7 +1255,7 @@
 
   // Disable the feature for service workers. The feature should be disallowed.
   feature.set_disallow_for_service_workers(true);
-  EXPECT_EQ(Feature::INVALID_CONTEXT,
+  EXPECT_EQ(Feature::AvailabilityResult::kInvalidContext,
             feature
                 .IsAvailableToContext(
                     extension.get(), mojom::ContextType::kPrivilegedExtension,
diff --git a/extensions/common/manifest_handlers/extension_manifests_icon_variants_unittest.cc b/extensions/common/manifest_handlers/extension_manifests_icon_variants_unittest.cc
index f30bbe8d6..221815c 100644
--- a/extensions/common/manifest_handlers/extension_manifests_icon_variants_unittest.cc
+++ b/extensions/common/manifest_handlers/extension_manifests_icon_variants_unittest.cc
@@ -30,7 +30,7 @@
 using NoIconVariantsManifestTest = ManifestTest;
 
 TEST_F(NoIconVariantsManifestTest, Warnings) {
-  // Test simple feature's AvailabilityResult::UNSUPPORTED_CHANNEL.
+  // Test simple feature's AvailabilityResult::kUnsupportedChannel.
   LoadAndExpectWarning("icon_variants.json",
                        "'icon_variants' requires canary channel or newer, "
                        "but this is the stable channel.");
diff --git a/extensions/common/mojom/message_port_mojom_traits.cc b/extensions/common/mojom/message_port_mojom_traits.cc
index ade0642c..46a3686 100644
--- a/extensions/common/mojom/message_port_mojom_traits.cc
+++ b/extensions/common/mojom/message_port_mojom_traits.cc
@@ -10,10 +10,13 @@
 
 bool StructTraits<extensions::mojom::MessageDataView, extensions::Message>::
     Read(extensions::mojom::MessageDataView data, extensions::Message* out) {
-  out->format = data.format();
-  out->user_gesture = data.user_gesture();
-  out->from_privileged_context = data.from_privileged_context();
-  return data.ReadData(&out->data);
+  std::string message_data;
+  if (!data.ReadData(&message_data)) {
+    return false;
+  }
+  *out = extensions::Message(message_data, data.format(), data.user_gesture(),
+                             data.from_privileged_context());
+  return true;
 }
 
 bool StructTraits<extensions::mojom::PortIdDataView, extensions::PortId>::Read(
diff --git a/extensions/common/mojom/message_port_mojom_traits.h b/extensions/common/mojom/message_port_mojom_traits.h
index 238d241..f6bb4b0 100644
--- a/extensions/common/mojom/message_port_mojom_traits.h
+++ b/extensions/common/mojom/message_port_mojom_traits.h
@@ -18,20 +18,20 @@
 template <>
 struct StructTraits<extensions::mojom::MessageDataView, extensions::Message> {
   static const std::string& data(const extensions::Message& message) {
-    return message.data;
+    return message.data();
   }
 
   static extensions::mojom::SerializationFormat format(
       const extensions::Message& message) {
-    return message.format;
+    return message.format();
   }
 
   static bool user_gesture(const extensions::Message& message) {
-    return message.user_gesture;
+    return message.user_gesture();
   }
 
   static bool from_privileged_context(const extensions::Message& message) {
-    return message.from_privileged_context;
+    return message.from_privileged_context();
   }
 
   static bool Read(extensions::mojom::MessageDataView data,
diff --git a/extensions/common/mojom/message_port_mojom_traits_unittest.cc b/extensions/common/mojom/message_port_mojom_traits_unittest.cc
index bee33f384..fe8c5a7e2 100644
--- a/extensions/common/mojom/message_port_mojom_traits_unittest.cc
+++ b/extensions/common/mojom/message_port_mojom_traits_unittest.cc
@@ -57,35 +57,33 @@
   EXPECT_TRUE(mojo::test::SerializeAndDeserialize<extensions::mojom::Message>(
       input, output));
 
-  EXPECT_EQ(input.data, output.data);
-  EXPECT_EQ(input.format, output.format);
-  EXPECT_EQ(input.user_gesture, output.user_gesture);
-  EXPECT_EQ(input.from_privileged_context, output.from_privileged_context);
+  EXPECT_EQ(input.data(), output.data());
+  EXPECT_EQ(input.format(), output.format());
+  EXPECT_EQ(input.user_gesture(), output.user_gesture());
+  EXPECT_EQ(input.from_privileged_context(), output.from_privileged_context());
 }
 
 TEST(MessagePortMojomTraitsTest, MessageValues) {
-  Message input;
-  input.data = "some text";
-  input.format = mojom::SerializationFormat::kStructuredCloned;
-  input.user_gesture = true;
-  input.from_privileged_context = true;
+  Message input("some text", mojom::SerializationFormat::kStructuredCloned,
+                /*user_gesture=*/true, /*from_privileged_context=*/true);
   Message output;
   EXPECT_TRUE(mojo::test::SerializeAndDeserialize<extensions::mojom::Message>(
       input, output));
 
-  EXPECT_EQ(input.data, output.data);
-  EXPECT_EQ(input.format, output.format);
-  EXPECT_EQ(input.user_gesture, output.user_gesture);
-  EXPECT_EQ(input.from_privileged_context, output.from_privileged_context);
+  EXPECT_EQ(input.data(), output.data());
+  EXPECT_EQ(input.format(), output.format());
+  EXPECT_EQ(input.user_gesture(), output.user_gesture());
+  EXPECT_EQ(input.from_privileged_context(), output.from_privileged_context());
 
-  input.user_gesture = false;
+  input = Message("some text", mojom::SerializationFormat::kStructuredCloned,
+                  /*user_gesture=*/false, /*from_privileged_context=*/true);
   EXPECT_TRUE(mojo::test::SerializeAndDeserialize<extensions::mojom::Message>(
       input, output));
 
-  EXPECT_EQ(input.data, output.data);
-  EXPECT_EQ(input.format, output.format);
-  EXPECT_EQ(input.user_gesture, output.user_gesture);
-  EXPECT_EQ(input.from_privileged_context, output.from_privileged_context);
+  EXPECT_EQ(input.data(), output.data());
+  EXPECT_EQ(input.format(), output.format());
+  EXPECT_EQ(input.user_gesture(), output.user_gesture());
+  EXPECT_EQ(input.from_privileged_context(), output.from_privileged_context());
 }
 
 }  // namespace extensions
diff --git a/extensions/renderer/api/messaging/gin_port.h b/extensions/renderer/api/messaging/gin_port.h
index 661563eb..a4f58b96 100644
--- a/extensions/renderer/api/messaging/gin_port.h
+++ b/extensions/renderer/api/messaging/gin_port.h
@@ -25,7 +25,7 @@
 
 namespace extensions {
 class APIEventHandler;
-struct Message;
+class Message;
 
 // A gin::Wrappable implementation of `runtime.Port` exposed to extensions. This
 // provides a means for extensions to communicate with themselves and each
diff --git a/extensions/renderer/api/messaging/gin_port_unittest.cc b/extensions/renderer/api/messaging/gin_port_unittest.cc
index 3523584..5677b2b 100644
--- a/extensions/renderer/api/messaging/gin_port_unittest.cc
+++ b/extensions/renderer/api/messaging/gin_port_unittest.cc
@@ -191,15 +191,15 @@
       ASSERT_TRUE(delegate()->last_port_id());
       EXPECT_EQ(*expected_port_id, delegate()->last_port_id());
       ASSERT_TRUE(delegate()->last_message());
-      EXPECT_EQ(expected_message->data, delegate()->last_message()->data);
-      EXPECT_EQ(expected_message->user_gesture,
-                delegate()->last_message()->user_gesture);
+      EXPECT_EQ(expected_message->data(), delegate()->last_message()->data());
+      EXPECT_EQ(expected_message->user_gesture(),
+                delegate()->last_message()->user_gesture());
     } else {
       RunFunctionAndExpectError(v8_function, context, std::size(args), args,
                                 "Uncaught Error: Could not serialize message.");
       EXPECT_FALSE(delegate()->last_port_id());
       EXPECT_FALSE(delegate()->last_message())
-          << delegate()->last_message()->data;
+          << delegate()->last_message()->data();
     }
     delegate()->ResetLastMessage();
   };
diff --git a/extensions/renderer/api/messaging/messaging_util.cc b/extensions/renderer/api/messaging/messaging_util.cc
index 3380ebb..6a143d6 100644
--- a/extensions/renderer/api/messaging/messaging_util.cc
+++ b/extensions/renderer/api/messaging/messaging_util.cc
@@ -205,7 +205,7 @@
                                           std::string* error) {
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
   v8::Local<v8::String> v8_message_string =
-      gin::StringToV8(isolate, message.data);
+      gin::StringToV8(isolate, message.data());
   v8::Local<v8::Value> parsed_message;
   if (!v8::JSON::Parse(context, v8_message_string).ToLocal(&parsed_message)) {
     CHECK(is_parsing_fail_safe);
@@ -221,7 +221,7 @@
                                  const Message& message,
                                  bool is_parsing_fail_safe,
                                  std::string* error) {
-  switch (message.format) {
+  switch (message.format()) {
     case mojom::SerializationFormat::kStructuredCloned:
       return MessageToV8UsingStructuredCloning(context, message, error);
     case mojom::SerializationFormat::kJson:
diff --git a/extensions/renderer/api/messaging/messaging_util.h b/extensions/renderer/api/messaging/messaging_util.h
index 6e9194f..6d23351 100644
--- a/extensions/renderer/api/messaging/messaging_util.h
+++ b/extensions/renderer/api/messaging/messaging_util.h
@@ -23,7 +23,7 @@
 }  // namespace mojom
 
 class ScriptContext;
-struct Message;
+class Message;
 struct MessagingEndpoint;
 
 namespace messaging_util {
diff --git a/extensions/renderer/api/messaging/native_renderer_messaging_service.cc b/extensions/renderer/api/messaging/native_renderer_messaging_service.cc
index e3e95b0d..52146fe 100644
--- a/extensions/renderer/api/messaging/native_renderer_messaging_service.cc
+++ b/extensions/renderer/api/messaging/native_renderer_messaging_service.cc
@@ -373,7 +373,7 @@
   // port's `mojom::SerializationFormat` is always the same as that passed by
   // messaging clients and is independent of any fallback behavior.
   PortId port_id(script_context->context_id(), data->next_port_id++, is_opener,
-                 message.format);
+                 message.format());
   mojo::PendingAssociatedRemote<mojom::MessagePort> message_port;
   mojo::PendingAssociatedReceiver<mojom::MessagePortHost>
       message_port_host_receiver;
@@ -515,7 +515,7 @@
   v8::Isolate* isolate = script_context->isolate();
   v8::HandleScope handle_scope(isolate);
   std::unique_ptr<InteractionProvider::Scope> scoped_extension_interaction;
-  if (message.user_gesture) {
+  if (message.user_gesture()) {
     // TODO(crbug.com/41467311): Add logging for privilege level for
     // sender and receiver and decide if want to allow unprivileged to
     // privileged support.
@@ -533,8 +533,8 @@
     ScriptContext* script_context) {
   std::unique_ptr<blink::WebScopedWindowFocusAllowedIndicator>
       allow_window_focus;
-  if (message.user_gesture && script_context->web_frame()) {
-    bool sender_is_privileged = message.from_privileged_context;
+  if (message.user_gesture() && script_context->web_frame()) {
+    bool sender_is_privileged = message.from_privileged_context();
     bool receiver_is_privileged =
         script_context->context_type() ==
         extensions::mojom::ContextType::kPrivilegedExtension;
diff --git a/extensions/renderer/api/messaging/native_renderer_messaging_service.h b/extensions/renderer/api/messaging/native_renderer_messaging_service.h
index d23338a3..9a8209f1 100644
--- a/extensions/renderer/api/messaging/native_renderer_messaging_service.h
+++ b/extensions/renderer/api/messaging/native_renderer_messaging_service.h
@@ -31,7 +31,7 @@
 
 class NativeExtensionBindingsSystem;
 class ScriptContextSetIterable;
-struct Message;
+class Message;
 struct MessageTarget;
 struct PortId;
 
diff --git a/extensions/renderer/api/messaging/one_time_message_handler.h b/extensions/renderer/api/messaging/one_time_message_handler.h
index 3dc3863..d07b0e4 100644
--- a/extensions/renderer/api/messaging/one_time_message_handler.h
+++ b/extensions/renderer/api/messaging/one_time_message_handler.h
@@ -32,7 +32,7 @@
 class NativeExtensionBindingsSystem;
 class NativeRendererMessagingService;
 class ScriptContext;
-struct Message;
+class Message;
 struct MessageTarget;
 struct PortId;
 
diff --git a/extensions/renderer/script_context.cc b/extensions/renderer/script_context.cc
index 992ebaa9..363ca7b 100644
--- a/extensions/renderer/script_context.cc
+++ b/extensions/renderer/script_context.cc
@@ -284,7 +284,8 @@
                         switches::kExtensionTestApiOnWebPages) &&
                     context_type_ == mojom::ContextType::kWebPage);
     Feature::AvailabilityResult result =
-        allowed ? Feature::IS_AVAILABLE : Feature::MISSING_COMMAND_LINE_SWITCH;
+        allowed ? Feature::AvailabilityResult::kIsAvailable
+                : Feature::AvailabilityResult::kMissingCommandLineSwitch;
     return Feature::Availability(result,
                                  allowed ? "" : "Only allowed in tests");
   }
@@ -309,7 +310,7 @@
               .IsMessagingEnabledInUserScriptWorld(*blink_isolated_world_id_);
       if (!is_available) {
         return Feature::Availability(
-            Feature::INVALID_CONTEXT,
+            Feature::AvailabilityResult::kInvalidContext,
             "Messaging APIs are not enabled for this user script world.");
       }
     }
diff --git a/extensions/renderer/v8_context_native_handler.cc b/extensions/renderer/v8_context_native_handler.cc
index add91c66..edad15a 100644
--- a/extensions/renderer/v8_context_native_handler.cc
+++ b/extensions/renderer/v8_context_native_handler.cc
@@ -58,7 +58,7 @@
            v8::String::NewFromUtf8(isolate, "result",
                                    v8::NewStringType::kInternalized)
                .ToLocalChecked(),
-           v8::Integer::New(isolate, availability.result()))
+           v8::Integer::New(isolate, availability.result_as_int32()))
       .ToChecked();
   args.GetReturnValue().Set(ret);
 }
diff --git a/extensions/shell/app/shell_main_delegate.cc b/extensions/shell/app/shell_main_delegate.cc
index 25f4636..75ce9e90 100644
--- a/extensions/shell/app/shell_main_delegate.cc
+++ b/extensions/shell/app/shell_main_delegate.cc
@@ -7,6 +7,7 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/no_destructor.h"
 #include "base/notimplemented.h"
 #include "base/path_service.h"
diff --git a/fuchsia_web/common/init_logging.cc b/fuchsia_web/common/init_logging.cc
index 37578172..e5107bab 100644
--- a/fuchsia_web/common/init_logging.cc
+++ b/fuchsia_web/common/init_logging.cc
@@ -8,6 +8,7 @@
 
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
diff --git a/google_apis/gcm/tools/mcs_probe.cc b/google_apis/gcm/tools/mcs_probe.cc
index 8ab2296f..b51e7ad 100644
--- a/google_apis/gcm/tools/mcs_probe.cc
+++ b/google_apis/gcm/tools/mcs_probe.cc
@@ -22,6 +22,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/message_loop/message_pump_type.h"
diff --git a/headless/lib/headless_content_main_delegate.cc b/headless/lib/headless_content_main_delegate.cc
index a2b1e82..166c564b4 100644
--- a/headless/lib/headless_content_main_delegate.cc
+++ b/headless/lib/headless_content_main_delegate.cc
@@ -17,6 +17,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/lazy_instance.h"
+#include "base/logging/logging_settings.h"
 #include "base/notimplemented.h"
 #include "base/path_service.h"
 #include "base/process/current_process.h"
diff --git a/infra/config/PACKAGE.lock b/infra/config/PACKAGE.lock
index 3a1f775..ba54abeb 100644
--- a/infra/config/PACKAGE.lock
+++ b/infra/config/PACKAGE.lock
@@ -32,10 +32,10 @@
 			"name": "@chromium-luci",
 			"source": {
 				"repo": "https://chromium.googlesource.com/infra/chromium/+/refs/heads/main",
-				"revision": "133d552b8613e9a56025efdf91348ea2e2f8dcac",
+				"revision": "2bb983a2ea4435c7a7c11a5e96664dc3090fad77",
 				"path": "starlark-libs/chromium-luci"
 			},
-			"lucicfg": "1.45.0"
+			"lucicfg": "1.46.1"
 		},
 		{
 			"name": "@chromium-targets",
diff --git a/infra/config/PACKAGE.star b/infra/config/PACKAGE.star
index 5ea7d22..3d51d2eb 100644
--- a/infra/config/PACKAGE.star
+++ b/infra/config/PACKAGE.star
@@ -29,7 +29,7 @@
         repo = "infra/chromium",
         ref = "refs/heads/main",
         path = "starlark-libs/chromium-luci",
-        revision = "133d552b8613e9a56025efdf91348ea2e2f8dcac",
+        revision = "2bb983a2ea4435c7a7c11a5e96664dc3090fad77",
     ),
 )
 
diff --git a/infra/config/autoshard_exceptions.json b/infra/config/autoshard_exceptions.json
index a647073..352fa09 100644
--- a/infra/config/autoshard_exceptions.json
+++ b/infra/config/autoshard_exceptions.json
@@ -134,7 +134,7 @@
                 "try_builder": "linux-rel"
             },
             "blink_wpt_tests": {
-                "shards": 2,
+                "shards": 3,
                 "try_builder": "linux-rel"
             },
             "browser_tests": {
@@ -167,6 +167,14 @@
             }
         }
     },
+    "chromium.mac": {
+        "mac15-arm64-rel-tests": {
+            "interactive_ui_tests": {
+                "shards": 8,
+                "try_builder": "mac15-arm64-rel"
+            }
+        }
+    },
     "chromium.memory": {
         "Linux ASan LSan Tests (1)": {
             "components_unittests": {
@@ -178,7 +186,7 @@
                 "try_builder": "linux_chromium_asan_rel_ng"
             },
             "interactive_ui_tests": {
-                "shards": 92,
+                "shards": 101,
                 "try_builder": "linux_chromium_asan_rel_ng"
             },
             "sync_integration_tests": {
@@ -186,13 +194,13 @@
                 "try_builder": "linux_chromium_asan_rel_ng"
             },
             "unit_tests": {
-                "shards": 9,
+                "shards": 10,
                 "try_builder": "linux_chromium_asan_rel_ng"
             }
         },
         "Linux TSan Tests": {
             "blink_unittests": {
-                "shards": 7,
+                "shards": 8,
                 "try_builder": "linux_chromium_tsan_rel_ng"
             },
             "components_unittests": {
@@ -216,7 +224,7 @@
                 "try_builder": "linux_chromium_tsan_rel_ng"
             },
             "unit_tests": {
-                "shards": 8,
+                "shards": 10,
                 "try_builder": "linux_chromium_tsan_rel_ng"
             }
         }
@@ -236,7 +244,7 @@
                 "try_builder": "win-rel"
             },
             "interactive_ui_tests": {
-                "shards": 18,
+                "shards": 20,
                 "try_builder": "win-rel"
             },
             "pixel_browser_tests": {
@@ -253,4 +261,4 @@
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/infra/config/generated/builders/ci/Linux ASan LSan Builder/targets/chromium.memory.json b/infra/config/generated/builders/ci/Linux ASan LSan Builder/targets/chromium.memory.json
index d1cc8ba..1826e9ea6 100644
--- a/infra/config/generated/builders/ci/Linux ASan LSan Builder/targets/chromium.memory.json
+++ b/infra/config/generated/builders/ci/Linux ASan LSan Builder/targets/chromium.memory.json
@@ -913,7 +913,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 92
+          "shards": 101
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
@@ -1508,7 +1508,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 9
+          "shards": 10
         },
         "test": "unit_tests",
         "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git "a/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/targets/chromium.memory.json" "b/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/targets/chromium.memory.json"
index d1cc8ba..1826e9ea6 100644
--- "a/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/targets/chromium.memory.json"
+++ "b/infra/config/generated/builders/ci/Linux ASan LSan Tests \0501\051/targets/chromium.memory.json"
@@ -913,7 +913,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 92
+          "shards": 101
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
@@ -1508,7 +1508,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 9
+          "shards": 10
         },
         "test": "unit_tests",
         "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git a/infra/config/generated/builders/ci/Linux Builder/targets/chromium.linux.json b/infra/config/generated/builders/ci/Linux Builder/targets/chromium.linux.json
index 1c5be331..2c48fcbd 100644
--- a/infra/config/generated/builders/ci/Linux Builder/targets/chromium.linux.json
+++ b/infra/config/generated/builders/ci/Linux Builder/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
+          "shards": 3
         },
         "test": "blink_wpt_tests",
         "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/ci/Linux TSan Builder/targets/chromium.memory.json b/infra/config/generated/builders/ci/Linux TSan Builder/targets/chromium.memory.json
index 63b95ee..fee76ffb4 100644
--- a/infra/config/generated/builders/ci/Linux TSan Builder/targets/chromium.memory.json
+++ b/infra/config/generated/builders/ci/Linux TSan Builder/targets/chromium.memory.json
@@ -213,7 +213,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 7
+          "shards": 8
         },
         "test": "blink_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/controller:blink_unittests/"
@@ -1490,7 +1490,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 8
+          "shards": 10
         },
         "test": "unit_tests",
         "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git a/infra/config/generated/builders/ci/Linux TSan Tests/targets/chromium.memory.json b/infra/config/generated/builders/ci/Linux TSan Tests/targets/chromium.memory.json
index 63b95ee..fee76ffb4 100644
--- a/infra/config/generated/builders/ci/Linux TSan Tests/targets/chromium.memory.json
+++ b/infra/config/generated/builders/ci/Linux TSan Tests/targets/chromium.memory.json
@@ -213,7 +213,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 7
+          "shards": 8
         },
         "test": "blink_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/controller:blink_unittests/"
@@ -1490,7 +1490,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 8
+          "shards": 10
         },
         "test": "unit_tests",
         "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git a/infra/config/generated/builders/ci/Linux Tests/targets/chromium.linux.json b/infra/config/generated/builders/ci/Linux Tests/targets/chromium.linux.json
index 8005c51..be6f61e 100644
--- a/infra/config/generated/builders/ci/Linux Tests/targets/chromium.linux.json
+++ b/infra/config/generated/builders/ci/Linux Tests/targets/chromium.linux.json
@@ -1677,7 +1677,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
+          "shards": 3
         },
         "test": "blink_wpt_tests",
         "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/ci/Win x64 Builder/targets/chromium.win.json b/infra/config/generated/builders/ci/Win x64 Builder/targets/chromium.win.json
index 84eb9e2..a761b00 100644
--- a/infra/config/generated/builders/ci/Win x64 Builder/targets/chromium.win.json
+++ b/infra/config/generated/builders/ci/Win x64 Builder/targets/chromium.win.json
@@ -1078,7 +1078,7 @@
             "os": "Windows-10-19045"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 18
+          "shards": 20
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/builders/ci/Win10 Tests x64/targets/chromium.win.json b/infra/config/generated/builders/ci/Win10 Tests x64/targets/chromium.win.json
index c0f9129..fa55840 100644
--- a/infra/config/generated/builders/ci/Win10 Tests x64/targets/chromium.win.json
+++ b/infra/config/generated/builders/ci/Win10 Tests x64/targets/chromium.win.json
@@ -1049,7 +1049,7 @@
             "os": "Windows-10-19045"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 18
+          "shards": 20
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json b/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json
index fbc9bc45..7fadf69 100644
--- a/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json
+++ b/infra/config/generated/builders/ci/ios-blink-rel-fyi/properties.json
@@ -70,5 +70,5 @@
   },
   "builder_group": "chromium.fyi",
   "recipe": "chromium",
-  "xcode_build_version": "17b54"
+  "xcode_build_version": "17c5013i"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json
index 4ea22f1..15b3f4d 100644
--- a/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json
+++ b/infra/config/generated/builders/ci/ios-blink-rel-fyi/targets/chromium.fyi.json
@@ -9,7 +9,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -21,7 +21,7 @@
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
         "module_scheme": "gtest",
-        "name": "absl_hardening_tests iPhone 15 26.1",
+        "name": "absl_hardening_tests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -40,8 +40,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -52,14 +52,14 @@
         },
         "test": "absl_hardening_tests",
         "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -71,7 +71,7 @@
         },
         "module_name": "//third_party/angle/src/tests:angle_unittests",
         "module_scheme": "gtest",
-        "name": "angle_unittests iPhone 15 26.1",
+        "name": "angle_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -90,8 +90,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -103,7 +103,7 @@
         "test": "angle_unittests",
         "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/",
         "use_isolated_scripts_api": true,
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -112,7 +112,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -124,7 +124,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPhone 15 26.1",
+        "name": "base_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -143,8 +143,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -155,14 +155,14 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -174,7 +174,7 @@
         },
         "module_name": "//third_party/blink/common:blink_common_unittests",
         "module_scheme": "gtest",
-        "name": "blink_common_unittests iPhone 15 26.1",
+        "name": "blink_common_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -193,8 +193,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -205,14 +205,14 @@
         },
         "test": "blink_common_unittests",
         "test_id_prefix": "ninja://third_party/blink/common:blink_common_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -224,7 +224,7 @@
         },
         "module_name": "//third_party/blink/renderer/platform:blink_fuzzer_unittests",
         "module_scheme": "gtest",
-        "name": "blink_fuzzer_unittests iPhone 15 26.1",
+        "name": "blink_fuzzer_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -243,8 +243,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -255,14 +255,14 @@
         },
         "test": "blink_fuzzer_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_fuzzer_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -274,7 +274,7 @@
         },
         "module_name": "//third_party/blink/renderer/platform/heap:blink_heap_unittests",
         "module_scheme": "gtest",
-        "name": "blink_heap_unittests iPhone 15 26.1",
+        "name": "blink_heap_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -293,8 +293,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -305,7 +305,7 @@
         },
         "test": "blink_heap_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/platform/heap:blink_heap_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -315,7 +315,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -327,7 +327,7 @@
         },
         "module_name": "//third_party/blink/renderer/platform:blink_platform_unittests",
         "module_scheme": "gtest",
-        "name": "blink_platform_unittests iPhone 15 26.1",
+        "name": "blink_platform_unittests iPhone 15 26.2",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
           "--gerrit-patchset=${patch_set}",
@@ -351,8 +351,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -363,14 +363,14 @@
         },
         "test": "blink_platform_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_platform_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -382,7 +382,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_crypto_tests iPhone 15 26.1",
+        "name": "boringssl_crypto_tests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -401,8 +401,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -413,14 +413,14 @@
         },
         "test": "boringssl_crypto_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -432,7 +432,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_ssl_tests iPhone 15 26.1",
+        "name": "boringssl_ssl_tests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -451,8 +451,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -463,14 +463,14 @@
         },
         "test": "boringssl_ssl_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -482,7 +482,7 @@
         },
         "module_name": "//media/capture:capture_unittests",
         "module_scheme": "gtest",
-        "name": "capture_unittests iPhone 15 26.1",
+        "name": "capture_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -501,8 +501,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -513,14 +513,14 @@
         },
         "test": "capture_unittests",
         "test_id_prefix": "ninja://media/capture:capture_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -532,7 +532,7 @@
         },
         "module_name": "//media/cast:cast_unittests",
         "module_scheme": "gtest",
-        "name": "cast_unittests iPhone 15 26.1",
+        "name": "cast_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -551,8 +551,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -563,7 +563,7 @@
         },
         "test": "cast_unittests",
         "test_id_prefix": "ninja://media/cast:cast_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -573,7 +573,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -585,7 +585,7 @@
         },
         "module_name": "//cc:cc_unittests",
         "module_scheme": "gtest",
-        "name": "cc_unittests iPhone 15 26.1",
+        "name": "cc_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -604,8 +604,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -616,7 +616,7 @@
         },
         "test": "cc_unittests",
         "test_id_prefix": "ninja://cc:cc_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -625,7 +625,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -637,7 +637,7 @@
         },
         "module_name": "//components:components_browsertests",
         "module_scheme": "gtest",
-        "name": "components_browsertests iPhone 15 26.1",
+        "name": "components_browsertests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -656,8 +656,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -668,7 +668,7 @@
         },
         "test": "components_browsertests",
         "test_id_prefix": "ninja://components:components_browsertests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -677,7 +677,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -689,7 +689,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPhone 15 26.1",
+        "name": "components_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -708,8 +708,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -720,7 +720,7 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -729,7 +729,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -741,7 +741,7 @@
         },
         "module_name": "//ui/compositor:compositor_unittests",
         "module_scheme": "gtest",
-        "name": "compositor_unittests iPhone 15 26.1",
+        "name": "compositor_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -760,8 +760,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -772,7 +772,7 @@
         },
         "test": "compositor_unittests",
         "test_id_prefix": "ninja://ui/compositor:compositor_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -781,7 +781,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -793,7 +793,7 @@
         },
         "module_name": "//content/test:content_browsertests",
         "module_scheme": "gtest",
-        "name": "content_browsertests iPhone 15 26.1",
+        "name": "content_browsertests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -812,8 +812,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -825,7 +825,7 @@
         },
         "test": "content_browsertests",
         "test_id_prefix": "ninja://content/test:content_browsertests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -834,7 +834,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -846,7 +846,7 @@
         },
         "module_name": "//content/test:content_unittests",
         "module_scheme": "gtest",
-        "name": "content_unittests iPhone 15 26.1",
+        "name": "content_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -865,8 +865,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -877,14 +877,14 @@
         },
         "test": "content_unittests",
         "test_id_prefix": "ninja://content/test:content_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -896,7 +896,7 @@
         },
         "module_name": "//third_party/crashpad/crashpad:crashpad_tests",
         "module_scheme": "gtest",
-        "name": "crashpad_tests iPhone 15 26.1",
+        "name": "crashpad_tests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -915,8 +915,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -927,14 +927,14 @@
         },
         "test": "crashpad_tests",
         "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -946,7 +946,7 @@
         },
         "module_name": "//crypto:crypto_unittests",
         "module_scheme": "gtest",
-        "name": "crypto_unittests iPhone 15 26.1",
+        "name": "crypto_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -965,8 +965,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -977,14 +977,14 @@
         },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -996,7 +996,7 @@
         },
         "module_name": "//device:device_unittests",
         "module_scheme": "gtest",
-        "name": "device_unittests iPhone 15 26.1",
+        "name": "device_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1015,8 +1015,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1027,14 +1027,14 @@
         },
         "test": "device_unittests",
         "test_id_prefix": "ninja://device:device_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1046,7 +1046,7 @@
         },
         "module_name": "//ui/display:display_unittests",
         "module_scheme": "gtest",
-        "name": "display_unittests iPhone 15 26.1",
+        "name": "display_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1065,8 +1065,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1077,14 +1077,14 @@
         },
         "test": "display_unittests",
         "test_id_prefix": "ninja://ui/display:display_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1096,7 +1096,7 @@
         },
         "module_name": "//third_party/leveldatabase:env_chromium_unittests",
         "module_scheme": "gtest",
-        "name": "env_chromium_unittests iPhone 15 26.1",
+        "name": "env_chromium_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1115,8 +1115,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1127,14 +1127,14 @@
         },
         "test": "env_chromium_unittests",
         "test_id_prefix": "ninja://third_party/leveldatabase:env_chromium_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1146,7 +1146,7 @@
         },
         "module_name": "//ui/events:events_unittests",
         "module_scheme": "gtest",
-        "name": "events_unittests iPhone 15 26.1",
+        "name": "events_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1165,8 +1165,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1177,14 +1177,14 @@
         },
         "test": "events_unittests",
         "test_id_prefix": "ninja://ui/events:events_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1196,7 +1196,7 @@
         },
         "module_name": "//google_apis/gcm:gcm_unit_tests",
         "module_scheme": "gtest",
-        "name": "gcm_unit_tests iPhone 15 26.1",
+        "name": "gcm_unit_tests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1215,8 +1215,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1227,7 +1227,7 @@
         },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1236,7 +1236,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1248,7 +1248,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPhone 15 26.1",
+        "name": "gfx_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1267,8 +1267,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1279,14 +1279,14 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1298,7 +1298,7 @@
         },
         "module_name": "//gin:gin_unittests",
         "module_scheme": "gtest",
-        "name": "gin_unittests iPhone 15 26.1",
+        "name": "gin_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1317,8 +1317,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1329,14 +1329,14 @@
         },
         "test": "gin_unittests",
         "test_id_prefix": "ninja://gin:gin_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1348,7 +1348,7 @@
         },
         "module_name": "//ui/gl:gl_unittests",
         "module_scheme": "gtest",
-        "name": "gl_unittests iPhone 15 26.1",
+        "name": "gl_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1367,8 +1367,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1379,14 +1379,14 @@
         },
         "test": "gl_unittests",
         "test_id_prefix": "ninja://ui/gl:gl_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1398,7 +1398,7 @@
         },
         "module_name": "//google_apis:google_apis_unittests",
         "module_scheme": "gtest",
-        "name": "google_apis_unittests iPhone 15 26.1",
+        "name": "google_apis_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1417,8 +1417,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1429,7 +1429,7 @@
         },
         "test": "google_apis_unittests",
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1438,7 +1438,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1450,7 +1450,7 @@
         },
         "module_name": "//gpu:gpu_unittests",
         "module_scheme": "gtest",
-        "name": "gpu_unittests iPhone 15 26.1",
+        "name": "gpu_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1469,8 +1469,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1481,14 +1481,14 @@
         },
         "test": "gpu_unittests",
         "test_id_prefix": "ninja://gpu:gpu_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1500,7 +1500,7 @@
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
         "module_scheme": "gtest",
-        "name": "gwp_asan_unittests iPhone 15 26.1",
+        "name": "gwp_asan_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1519,8 +1519,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1531,14 +1531,14 @@
         },
         "test": "gwp_asan_unittests",
         "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1550,7 +1550,7 @@
         },
         "module_name": "//ui/latency:latency_unittests",
         "module_scheme": "gtest",
-        "name": "latency_unittests iPhone 15 26.1",
+        "name": "latency_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1569,8 +1569,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1581,14 +1581,14 @@
         },
         "test": "latency_unittests",
         "test_id_prefix": "ninja://ui/latency:latency_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1600,7 +1600,7 @@
         },
         "module_name": "//third_party/leveldatabase:leveldb_unittests",
         "module_scheme": "gtest",
-        "name": "leveldb_unittests iPhone 15 26.1",
+        "name": "leveldb_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1619,8 +1619,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1631,14 +1631,14 @@
         },
         "test": "leveldb_unittests",
         "test_id_prefix": "ninja://third_party/leveldatabase:leveldb_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1650,7 +1650,7 @@
         },
         "module_name": "//third_party/libjingle_xmpp:libjingle_xmpp_unittests",
         "module_scheme": "gtest",
-        "name": "libjingle_xmpp_unittests iPhone 15 26.1",
+        "name": "libjingle_xmpp_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1669,8 +1669,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1681,14 +1681,14 @@
         },
         "test": "libjingle_xmpp_unittests",
         "test_id_prefix": "ninja://third_party/libjingle_xmpp:libjingle_xmpp_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1700,7 +1700,7 @@
         },
         "module_name": "//third_party/liburlpattern:liburlpattern_unittests",
         "module_scheme": "gtest",
-        "name": "liburlpattern_unittests iPhone 15 26.1",
+        "name": "liburlpattern_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1719,8 +1719,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1731,7 +1731,7 @@
         },
         "test": "liburlpattern_unittests",
         "test_id_prefix": "ninja://third_party/liburlpattern:liburlpattern_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1740,7 +1740,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1752,7 +1752,7 @@
         },
         "module_name": "//media:media_unittests",
         "module_scheme": "gtest",
-        "name": "media_unittests iPhone 15 26.1",
+        "name": "media_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1771,8 +1771,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1783,7 +1783,7 @@
         },
         "test": "media_unittests",
         "test_id_prefix": "ninja://media:media_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1796,7 +1796,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1808,7 +1808,7 @@
         },
         "module_name": "//media:media_unittests",
         "module_scheme": "gtest",
-        "name": "media_unittests_skia_graphite_dawn iPhone 15 26.1",
+        "name": "media_unittests_skia_graphite_dawn iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1827,8 +1827,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1839,7 +1839,7 @@
         },
         "test": "media_unittests",
         "test_id_prefix": "ninja://media:media_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1852,7 +1852,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1864,7 +1864,7 @@
         },
         "module_name": "//media:media_unittests",
         "module_scheme": "gtest",
-        "name": "media_unittests_skia_graphite_metal iPhone 15 26.1",
+        "name": "media_unittests_skia_graphite_metal iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1883,8 +1883,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1895,14 +1895,14 @@
         },
         "test": "media_unittests",
         "test_id_prefix": "ninja://media:media_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1914,7 +1914,7 @@
         },
         "module_name": "//media/midi:midi_unittests",
         "module_scheme": "gtest",
-        "name": "midi_unittests iPhone 15 26.1",
+        "name": "midi_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1933,8 +1933,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1945,7 +1945,7 @@
         },
         "test": "midi_unittests",
         "test_id_prefix": "ninja://media/midi:midi_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1954,7 +1954,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1966,7 +1966,7 @@
         },
         "module_name": "//mojo:mojo_unittests",
         "module_scheme": "gtest",
-        "name": "mojo_unittests iPhone 15 26.1",
+        "name": "mojo_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1985,8 +1985,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1997,14 +1997,14 @@
         },
         "test": "mojo_unittests",
         "test_id_prefix": "ninja://mojo:mojo_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2016,7 +2016,7 @@
         },
         "module_name": "//ui/native_theme:native_theme_unittests",
         "module_scheme": "gtest",
-        "name": "native_theme_unittests iPhone 15 26.1",
+        "name": "native_theme_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2035,8 +2035,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2047,14 +2047,14 @@
         },
         "test": "native_theme_unittests",
         "test_id_prefix": "ninja://ui/native_theme:native_theme_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2066,7 +2066,7 @@
         },
         "module_name": "//net:net_unittests",
         "module_scheme": "gtest",
-        "name": "net_unittests iPhone 15 26.1",
+        "name": "net_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2085,8 +2085,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2097,14 +2097,14 @@
         },
         "test": "net_unittests",
         "test_id_prefix": "ninja://net:net_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2116,7 +2116,7 @@
         },
         "module_name": "//third_party/perfetto:perfetto_unittests",
         "module_scheme": "gtest",
-        "name": "perfetto_unittests iPhone 15 26.1",
+        "name": "perfetto_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2135,8 +2135,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2147,14 +2147,14 @@
         },
         "test": "perfetto_unittests",
         "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2166,7 +2166,7 @@
         },
         "module_name": "//printing:printing_unittests",
         "module_scheme": "gtest",
-        "name": "printing_unittests iPhone 15 26.1",
+        "name": "printing_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2185,8 +2185,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2197,14 +2197,14 @@
         },
         "test": "printing_unittests",
         "test_id_prefix": "ninja://printing:printing_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2216,7 +2216,7 @@
         },
         "module_name": "//sandbox:sandbox_unittests",
         "module_scheme": "gtest",
-        "name": "sandbox_unittests iPhone 15 26.1",
+        "name": "sandbox_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2235,8 +2235,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2247,7 +2247,7 @@
         },
         "test": "sandbox_unittests",
         "test_id_prefix": "ninja://sandbox:sandbox_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -2255,7 +2255,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2267,7 +2267,7 @@
         },
         "module_name": "//services:services_unittests",
         "module_scheme": "gtest",
-        "name": "services_unittests iPhone 15 26.1",
+        "name": "services_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2286,8 +2286,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2298,14 +2298,14 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2317,7 +2317,7 @@
         },
         "module_name": "//ui/shell_dialogs:shell_dialogs_unittests",
         "module_scheme": "gtest",
-        "name": "shell_dialogs_unittests iPhone 15 26.1",
+        "name": "shell_dialogs_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2336,8 +2336,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2348,14 +2348,14 @@
         },
         "test": "shell_dialogs_unittests",
         "test_id_prefix": "ninja://ui/shell_dialogs:shell_dialogs_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2367,7 +2367,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPhone 15 26.1",
+        "name": "skia_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2386,8 +2386,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2398,14 +2398,14 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2417,7 +2417,7 @@
         },
         "module_name": "//sql:sql_unittests",
         "module_scheme": "gtest",
-        "name": "sql_unittests iPhone 15 26.1",
+        "name": "sql_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2436,8 +2436,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2448,14 +2448,14 @@
         },
         "test": "sql_unittests",
         "test_id_prefix": "ninja://sql:sql_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2467,7 +2467,7 @@
         },
         "module_name": "//storage:storage_unittests",
         "module_scheme": "gtest",
-        "name": "storage_unittests iPhone 15 26.1",
+        "name": "storage_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2486,8 +2486,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2498,7 +2498,7 @@
         },
         "test": "storage_unittests",
         "test_id_prefix": "ninja://storage:storage_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -2506,7 +2506,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2518,7 +2518,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPhone 15 26.1",
+        "name": "ui_base_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2537,8 +2537,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2549,14 +2549,14 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2568,7 +2568,7 @@
         },
         "module_name": "//ui/touch_selection:ui_touch_selection_unittests",
         "module_scheme": "gtest",
-        "name": "ui_touch_selection_unittests iPhone 15 26.1",
+        "name": "ui_touch_selection_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2587,8 +2587,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2599,14 +2599,14 @@
         },
         "test": "ui_touch_selection_unittests",
         "test_id_prefix": "ninja://ui/touch_selection:ui_touch_selection_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2618,7 +2618,7 @@
         },
         "module_name": "//ui/tests:ui_unittests",
         "module_scheme": "gtest",
-        "name": "ui_unittests iPhone 15 26.1",
+        "name": "ui_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2637,8 +2637,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2649,14 +2649,14 @@
         },
         "test": "ui_unittests",
         "test_id_prefix": "ninja://ui/tests:ui_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2668,7 +2668,7 @@
         },
         "module_name": "//url:url_unittests",
         "module_scheme": "gtest",
-        "name": "url_unittests iPhone 15 26.1",
+        "name": "url_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2687,8 +2687,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2699,7 +2699,7 @@
         },
         "test": "url_unittests",
         "test_id_prefix": "ninja://url:url_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -2709,7 +2709,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2721,7 +2721,7 @@
         },
         "module_name": "//components/viz:viz_unittests",
         "module_scheme": "gtest",
-        "name": "viz_unittests iPhone 15 26.1",
+        "name": "viz_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2740,8 +2740,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2752,14 +2752,14 @@
         },
         "test": "viz_unittests",
         "test_id_prefix": "ninja://components/viz:viz_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2771,7 +2771,7 @@
         },
         "module_name": "//third_party/blink/renderer/platform/wtf:wtf_unittests",
         "module_scheme": "gtest",
-        "name": "wtf_unittests iPhone 15 26.1",
+        "name": "wtf_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2790,8 +2790,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2802,14 +2802,14 @@
         },
         "test": "wtf_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/platform/wtf:wtf_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2821,7 +2821,7 @@
         },
         "module_name": "//third_party/zlib:zlib_unittests",
         "module_scheme": "gtest",
-        "name": "zlib_unittests iPhone 15 26.1",
+        "name": "zlib_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2840,8 +2840,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2852,7 +2852,7 @@
         },
         "test": "zlib_unittests",
         "test_id_prefix": "ninja://third_party/zlib:zlib_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       }
     ]
   }
diff --git a/infra/config/generated/builders/ci/ios18-beta-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios18-beta-simulator/targets/chromium.fyi.json
index 99c3d80..d5b33d02 100644
--- a/infra/config/generated/builders/ci/ios18-beta-simulator/targets/chromium.fyi.json
+++ b/infra/config/generated/builders/ci/ios18-beta-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -45,7 +45,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -64,7 +64,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -96,7 +96,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -115,7 +115,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -147,7 +147,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -166,7 +166,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -198,7 +198,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -217,7 +217,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -249,7 +249,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -268,7 +268,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -300,7 +300,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -319,7 +319,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -351,7 +351,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -370,7 +370,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -402,7 +402,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -421,7 +421,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -453,7 +453,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -472,7 +472,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -504,7 +504,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -523,7 +523,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -555,7 +555,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -574,7 +574,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -606,7 +606,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -625,7 +625,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -657,7 +657,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -676,7 +676,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -708,7 +708,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -727,7 +727,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -759,7 +759,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -781,7 +781,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -813,7 +813,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -836,7 +836,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -868,7 +868,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -891,7 +891,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -923,7 +923,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -948,7 +948,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -980,7 +980,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1005,7 +1005,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1037,7 +1037,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1062,7 +1062,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1094,7 +1094,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1119,7 +1119,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1151,7 +1151,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1176,7 +1176,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1208,7 +1208,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1233,7 +1233,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1265,7 +1265,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1288,7 +1288,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1320,7 +1320,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1343,7 +1343,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1375,7 +1375,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1398,7 +1398,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1430,7 +1430,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1453,7 +1453,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1485,7 +1485,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1507,7 +1507,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1539,7 +1539,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1561,7 +1561,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1593,7 +1593,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1617,7 +1617,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1649,7 +1649,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1674,7 +1674,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1706,7 +1706,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1731,7 +1731,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1763,7 +1763,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1783,7 +1783,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1815,7 +1815,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1834,7 +1834,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1866,7 +1866,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1885,7 +1885,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1917,7 +1917,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1939,7 +1939,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1971,7 +1971,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1994,7 +1994,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2026,7 +2026,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2049,7 +2049,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2081,7 +2081,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2101,7 +2101,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2133,7 +2133,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2153,7 +2153,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2185,7 +2185,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2204,7 +2204,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2236,7 +2236,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2255,7 +2255,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2287,7 +2287,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2306,7 +2306,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2338,7 +2338,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2357,7 +2357,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2389,7 +2389,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2409,7 +2409,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2441,7 +2441,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2460,7 +2460,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2492,7 +2492,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2511,7 +2511,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2543,7 +2543,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2562,7 +2562,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2594,7 +2594,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2616,7 +2616,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2648,7 +2648,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2670,7 +2670,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2702,7 +2702,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2724,7 +2724,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2756,7 +2756,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2775,7 +2775,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2807,7 +2807,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2826,7 +2826,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2858,7 +2858,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2877,7 +2877,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2909,7 +2909,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2928,7 +2928,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2960,7 +2960,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2979,7 +2979,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3011,7 +3011,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3030,7 +3030,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3062,7 +3062,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3081,7 +3081,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3113,7 +3113,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3132,7 +3132,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3164,7 +3164,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3183,7 +3183,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3215,7 +3215,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3234,7 +3234,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3266,7 +3266,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3285,7 +3285,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3317,7 +3317,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3336,7 +3336,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3368,7 +3368,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3387,7 +3387,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3419,7 +3419,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3438,7 +3438,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3470,7 +3470,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3489,7 +3489,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3521,7 +3521,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3540,7 +3540,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3572,7 +3572,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3591,7 +3591,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3623,7 +3623,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3642,7 +3642,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3674,7 +3674,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3693,7 +3693,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3725,7 +3725,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
diff --git a/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json b/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json
index 2e2ed74..dd20a282 100644
--- a/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json
+++ b/infra/config/generated/builders/ci/ios18-sdk-simulator/properties.json
@@ -69,5 +69,5 @@
   },
   "builder_group": "chromium.fyi",
   "recipe": "chromium",
-  "xcode_build_version": "17b54"
+  "xcode_build_version": "17c5013i"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json
index 46cd8fdc..6df5ec5 100644
--- a/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json
+++ b/infra/config/generated/builders/ci/ios18-sdk-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -45,7 +45,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -64,7 +64,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -96,7 +96,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -115,7 +115,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -147,7 +147,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -166,7 +166,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -198,7 +198,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -217,7 +217,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -249,7 +249,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -268,7 +268,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -300,7 +300,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -319,7 +319,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -351,7 +351,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -370,7 +370,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -402,7 +402,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -421,7 +421,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -453,7 +453,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -472,7 +472,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -504,7 +504,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -523,7 +523,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -555,7 +555,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -574,7 +574,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -606,7 +606,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -625,7 +625,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -657,7 +657,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -676,7 +676,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -708,7 +708,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -727,7 +727,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -759,7 +759,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -778,7 +778,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -810,7 +810,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -829,7 +829,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -861,7 +861,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -880,7 +880,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -912,7 +912,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -931,7 +931,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -963,7 +963,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -982,7 +982,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1014,7 +1014,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1033,7 +1033,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1065,7 +1065,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1087,7 +1087,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1119,7 +1119,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1142,7 +1142,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1174,7 +1174,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1197,7 +1197,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1229,7 +1229,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1254,7 +1254,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1286,7 +1286,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1311,7 +1311,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1343,7 +1343,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1368,7 +1368,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1400,7 +1400,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1425,7 +1425,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1457,7 +1457,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1482,7 +1482,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1514,7 +1514,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1539,7 +1539,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1571,7 +1571,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1594,7 +1594,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1626,7 +1626,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1649,7 +1649,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1681,7 +1681,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1704,7 +1704,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1736,7 +1736,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1759,7 +1759,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1791,7 +1791,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1813,7 +1813,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1845,7 +1845,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1867,7 +1867,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1899,7 +1899,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1923,7 +1923,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1955,7 +1955,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1980,7 +1980,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2012,7 +2012,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2037,7 +2037,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2069,7 +2069,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2089,7 +2089,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2121,7 +2121,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2140,7 +2140,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2172,7 +2172,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2191,7 +2191,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2223,7 +2223,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2245,7 +2245,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2277,7 +2277,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2300,7 +2300,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2332,7 +2332,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2355,7 +2355,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2387,7 +2387,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2407,7 +2407,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2439,7 +2439,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2458,7 +2458,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2490,7 +2490,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2510,7 +2510,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2542,7 +2542,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2562,7 +2562,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2594,7 +2594,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2613,7 +2613,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2645,7 +2645,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2664,7 +2664,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2696,7 +2696,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2715,7 +2715,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2747,7 +2747,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2766,7 +2766,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2798,7 +2798,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2818,7 +2818,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2850,7 +2850,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2870,7 +2870,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2902,7 +2902,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2921,7 +2921,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2953,7 +2953,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2972,7 +2972,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3004,7 +3004,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3023,7 +3023,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3055,7 +3055,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3074,7 +3074,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3106,7 +3106,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3128,7 +3128,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3160,7 +3160,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3182,7 +3182,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3214,7 +3214,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3236,7 +3236,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3268,7 +3268,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3287,7 +3287,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3319,7 +3319,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3338,7 +3338,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3370,7 +3370,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3389,7 +3389,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3421,7 +3421,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3440,7 +3440,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3472,7 +3472,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3491,7 +3491,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3523,7 +3523,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3542,7 +3542,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3574,7 +3574,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3593,7 +3593,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3625,7 +3625,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3644,7 +3644,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3676,7 +3676,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3695,7 +3695,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3727,7 +3727,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3746,7 +3746,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3778,7 +3778,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3797,7 +3797,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3829,7 +3829,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3848,7 +3848,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3880,7 +3880,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3899,7 +3899,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3931,7 +3931,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3950,7 +3950,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3982,7 +3982,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4001,7 +4001,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4033,7 +4033,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4052,7 +4052,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4084,7 +4084,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4103,7 +4103,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4135,7 +4135,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4154,7 +4154,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4186,7 +4186,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4205,7 +4205,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4237,7 +4237,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4256,7 +4256,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4288,7 +4288,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4307,7 +4307,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4339,7 +4339,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4358,7 +4358,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4390,7 +4390,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4409,7 +4409,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4441,7 +4441,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
diff --git a/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json
index cd0b4c7..ad21b7e 100644
--- a/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json
+++ b/infra/config/generated/builders/ci/ios26-beta-simulator/targets/chromium.fyi.json
@@ -9,11 +9,11 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -21,7 +21,7 @@
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
         "module_scheme": "gtest",
-        "name": "absl_hardening_tests iPad Air (6th generation) 26.1",
+        "name": "absl_hardening_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -41,11 +41,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -53,18 +53,18 @@
         },
         "test": "absl_hardening_tests",
         "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -72,7 +72,7 @@
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
         "module_scheme": "gtest",
-        "name": "absl_hardening_tests iPhone 16 26.1",
+        "name": "absl_hardening_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -92,11 +92,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -104,18 +104,18 @@
         },
         "test": "absl_hardening_tests",
         "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -123,7 +123,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPad Air (6th generation) 26.1",
+        "name": "base_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -143,11 +143,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -155,18 +155,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -174,7 +174,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPhone 16 26.1",
+        "name": "base_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -194,11 +194,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -206,18 +206,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -225,7 +225,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPhone SE (3rd generation) 26.1",
+        "name": "base_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -245,11 +245,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -257,18 +257,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -276,7 +276,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_crypto_tests iPad Air (6th generation) 26.1",
+        "name": "boringssl_crypto_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -296,11 +296,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -308,18 +308,18 @@
         },
         "test": "boringssl_crypto_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -327,7 +327,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_crypto_tests iPhone 16 26.1",
+        "name": "boringssl_crypto_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -347,11 +347,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -359,18 +359,18 @@
         },
         "test": "boringssl_crypto_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -378,7 +378,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_ssl_tests iPad Air (6th generation) 26.1",
+        "name": "boringssl_ssl_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -398,11 +398,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -410,18 +410,18 @@
         },
         "test": "boringssl_ssl_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -429,7 +429,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_ssl_tests iPhone 16 26.1",
+        "name": "boringssl_ssl_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -449,11 +449,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -461,18 +461,18 @@
         },
         "test": "boringssl_ssl_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -480,7 +480,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPad Air (6th generation) 26.1",
+        "name": "components_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -500,11 +500,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -512,18 +512,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -531,7 +531,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPhone 16 26.1",
+        "name": "components_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -551,11 +551,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -563,18 +563,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -582,7 +582,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPhone SE (3rd generation) 26.1",
+        "name": "components_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -602,11 +602,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -614,18 +614,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -633,7 +633,7 @@
         },
         "module_name": "//crypto:crypto_unittests",
         "module_scheme": "gtest",
-        "name": "crypto_unittests iPad Air (6th generation) 26.1",
+        "name": "crypto_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -653,11 +653,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -665,18 +665,18 @@
         },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -684,7 +684,7 @@
         },
         "module_name": "//crypto:crypto_unittests",
         "module_scheme": "gtest",
-        "name": "crypto_unittests iPhone 16 26.1",
+        "name": "crypto_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -704,11 +704,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -716,18 +716,18 @@
         },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -735,7 +735,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPad Air (6th generation) 26.1",
+        "name": "gfx_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -755,11 +755,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -767,18 +767,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -786,7 +786,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPhone 16 26.1",
+        "name": "gfx_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -806,11 +806,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -818,18 +818,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -837,7 +837,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPhone SE (3rd generation) 26.1",
+        "name": "gfx_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -857,11 +857,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -869,18 +869,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -888,7 +888,7 @@
         },
         "module_name": "//google_apis:google_apis_unittests",
         "module_scheme": "gtest",
-        "name": "google_apis_unittests iPad Air (6th generation) 26.1",
+        "name": "google_apis_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -908,11 +908,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -920,18 +920,18 @@
         },
         "test": "google_apis_unittests",
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -939,7 +939,7 @@
         },
         "module_name": "//google_apis:google_apis_unittests",
         "module_scheme": "gtest",
-        "name": "google_apis_unittests iPhone 16 26.1",
+        "name": "google_apis_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -959,11 +959,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -971,18 +971,18 @@
         },
         "test": "google_apis_unittests",
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -990,7 +990,7 @@
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
         "module_scheme": "gtest",
-        "name": "gwp_asan_unittests iPad Air (6th generation) 26.1",
+        "name": "gwp_asan_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1010,11 +1010,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1022,18 +1022,18 @@
         },
         "test": "gwp_asan_unittests",
         "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1041,7 +1041,7 @@
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
         "module_scheme": "gtest",
-        "name": "gwp_asan_unittests iPhone 16 26.1",
+        "name": "gwp_asan_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1061,11 +1061,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1073,21 +1073,21 @@
         },
         "test": "gwp_asan_unittests",
         "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1095,7 +1095,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1115,11 +1115,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1128,21 +1128,21 @@
         },
         "test": "ios_chrome_bookmarks_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1150,7 +1150,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1170,11 +1170,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1183,7 +1183,7 @@
         },
         "test": "ios_chrome_bookmarks_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1192,14 +1192,14 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1207,7 +1207,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1227,11 +1227,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1240,7 +1240,7 @@
         },
         "test": "ios_chrome_integration_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1249,14 +1249,14 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1264,7 +1264,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1284,11 +1284,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1297,7 +1297,7 @@
         },
         "test": "ios_chrome_integration_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1306,14 +1306,14 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1321,7 +1321,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1341,11 +1341,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1354,7 +1354,7 @@
         },
         "test": "ios_chrome_settings_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1363,14 +1363,14 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1378,7 +1378,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1398,11 +1398,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1411,21 +1411,21 @@
         },
         "test": "ios_chrome_settings_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1433,7 +1433,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1453,11 +1453,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1466,21 +1466,21 @@
         },
         "test": "ios_chrome_signin_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1488,7 +1488,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1508,11 +1508,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1521,21 +1521,21 @@
         },
         "test": "ios_chrome_signin_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1543,7 +1543,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1563,11 +1563,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1575,21 +1575,21 @@
         },
         "test": "ios_chrome_smoke_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1597,7 +1597,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1617,11 +1617,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1629,7 +1629,7 @@
         },
         "test": "ios_chrome_smoke_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1638,14 +1638,14 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1653,7 +1653,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1673,11 +1673,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1686,7 +1686,7 @@
         },
         "test": "ios_chrome_ui_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1695,14 +1695,14 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1710,7 +1710,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1730,11 +1730,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1743,18 +1743,18 @@
         },
         "test": "ios_chrome_ui_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1762,7 +1762,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1782,11 +1782,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1794,18 +1794,18 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1813,7 +1813,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPhone 16 26.1",
+        "name": "ios_chrome_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1833,11 +1833,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1845,18 +1845,18 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1864,7 +1864,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1884,11 +1884,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1896,21 +1896,21 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1918,7 +1918,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1938,11 +1938,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1951,21 +1951,21 @@
         },
         "test": "ios_chrome_web_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1973,7 +1973,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_web_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_web_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1993,11 +1993,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2006,18 +2006,18 @@
         },
         "test": "ios_chrome_web_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2025,7 +2025,7 @@
         },
         "module_name": "//ios/components:ios_components_unittests",
         "module_scheme": "gtest",
-        "name": "ios_components_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_components_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2045,11 +2045,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2057,18 +2057,18 @@
         },
         "test": "ios_components_unittests",
         "test_id_prefix": "ninja://ios/components:ios_components_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2076,7 +2076,7 @@
         },
         "module_name": "//ios/components:ios_components_unittests",
         "module_scheme": "gtest",
-        "name": "ios_components_unittests iPhone 16 26.1",
+        "name": "ios_components_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2096,11 +2096,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2108,19 +2108,19 @@
         },
         "test": "ios_components_unittests",
         "test_id_prefix": "ninja://ios/components:ios_components_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2128,7 +2128,7 @@
         },
         "module_name": "//third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module",
         "module_scheme": "xctest",
-        "name": "ios_crash_xcuitests_module iPad Air (6th generation) 26.1",
+        "name": "ios_crash_xcuitests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2148,11 +2148,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2160,19 +2160,19 @@
         },
         "test": "ios_crash_xcuitests_module",
         "test_id_prefix": "ninja://third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2180,7 +2180,7 @@
         },
         "module_name": "//third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module",
         "module_scheme": "xctest",
-        "name": "ios_crash_xcuitests_module iPhone 16 26.1",
+        "name": "ios_crash_xcuitests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2200,11 +2200,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2212,18 +2212,18 @@
         },
         "test": "ios_crash_xcuitests_module",
         "test_id_prefix": "ninja://third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2231,7 +2231,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2251,11 +2251,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2263,18 +2263,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2282,7 +2282,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPhone 16 26.1",
+        "name": "ios_credential_provider_extension_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2302,11 +2302,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2314,18 +2314,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2333,7 +2333,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2353,11 +2353,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2365,18 +2365,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2384,7 +2384,7 @@
         },
         "module_name": "//ios/net:ios_net_unittests",
         "module_scheme": "gtest",
-        "name": "ios_net_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_net_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2404,11 +2404,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2417,18 +2417,18 @@
         },
         "test": "ios_net_unittests",
         "test_id_prefix": "ninja://ios/net:ios_net_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2436,7 +2436,7 @@
         },
         "module_name": "//ios/net:ios_net_unittests",
         "module_scheme": "gtest",
-        "name": "ios_net_unittests iPhone 16 26.1",
+        "name": "ios_net_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2456,11 +2456,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2469,18 +2469,18 @@
         },
         "test": "ios_net_unittests",
         "test_id_prefix": "ninja://ios/net:ios_net_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2488,7 +2488,7 @@
         },
         "module_name": "//ios/testing:ios_testing_unittests",
         "module_scheme": "gtest",
-        "name": "ios_testing_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_testing_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2508,11 +2508,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2520,18 +2520,18 @@
         },
         "test": "ios_testing_unittests",
         "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2539,7 +2539,7 @@
         },
         "module_name": "//ios/testing:ios_testing_unittests",
         "module_scheme": "gtest",
-        "name": "ios_testing_unittests iPhone 16 26.1",
+        "name": "ios_testing_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2559,11 +2559,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2571,18 +2571,18 @@
         },
         "test": "ios_testing_unittests",
         "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2590,7 +2590,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPad Air (6th generation) 26.1",
+        "name": "ios_web_inttests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2610,11 +2610,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2622,18 +2622,18 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2641,7 +2641,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPhone 16 26.1",
+        "name": "ios_web_inttests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2661,11 +2661,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2673,18 +2673,18 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2692,7 +2692,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_inttests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2712,11 +2712,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2724,21 +2724,21 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2746,7 +2746,7 @@
         },
         "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2766,11 +2766,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2778,21 +2778,21 @@
         },
         "test": "ios_web_shell_eg2tests_module",
         "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2800,7 +2800,7 @@
         },
         "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_web_shell_eg2tests_module iPhone 16 26.1",
+        "name": "ios_web_shell_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2820,11 +2820,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2832,18 +2832,18 @@
         },
         "test": "ios_web_shell_eg2tests_module",
         "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2851,7 +2851,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_web_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2871,11 +2871,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2883,18 +2883,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2902,7 +2902,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPhone 16 26.1",
+        "name": "ios_web_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2922,11 +2922,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2934,18 +2934,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2953,7 +2953,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2973,11 +2973,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2985,18 +2985,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3004,7 +3004,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPad Air (6th generation) 26.1",
+        "name": "ios_web_view_inttests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3024,11 +3024,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3036,18 +3036,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3055,7 +3055,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPhone 16 26.1",
+        "name": "ios_web_view_inttests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3075,11 +3075,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3087,18 +3087,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3106,7 +3106,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3126,11 +3126,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3138,18 +3138,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3157,7 +3157,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_web_view_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3177,11 +3177,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3189,18 +3189,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3208,7 +3208,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPhone 16 26.1",
+        "name": "ios_web_view_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3228,11 +3228,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3240,18 +3240,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3259,7 +3259,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3279,11 +3279,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3291,18 +3291,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3310,7 +3310,7 @@
         },
         "module_name": "//net:net_unittests",
         "module_scheme": "gtest",
-        "name": "net_unittests iPad Air (6th generation) 26.1",
+        "name": "net_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3330,11 +3330,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3342,18 +3342,18 @@
         },
         "test": "net_unittests",
         "test_id_prefix": "ninja://net:net_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3361,7 +3361,7 @@
         },
         "module_name": "//net:net_unittests",
         "module_scheme": "gtest",
-        "name": "net_unittests iPhone 16 26.1",
+        "name": "net_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3381,11 +3381,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3393,18 +3393,18 @@
         },
         "test": "net_unittests",
         "test_id_prefix": "ninja://net:net_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3412,7 +3412,7 @@
         },
         "module_name": "//services:services_unittests",
         "module_scheme": "gtest",
-        "name": "services_unittests iPad Air (6th generation) 26.1",
+        "name": "services_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3432,11 +3432,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3444,18 +3444,18 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3463,7 +3463,7 @@
         },
         "module_name": "//services:services_unittests",
         "module_scheme": "gtest",
-        "name": "services_unittests iPhone 16 26.1",
+        "name": "services_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3483,11 +3483,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3495,18 +3495,18 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3514,7 +3514,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPad Air (6th generation) 26.1",
+        "name": "skia_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3534,11 +3534,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3546,18 +3546,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3565,7 +3565,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPhone 16 26.1",
+        "name": "skia_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3585,11 +3585,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3597,18 +3597,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3616,7 +3616,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPhone SE (3rd generation) 26.1",
+        "name": "skia_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3636,11 +3636,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3648,18 +3648,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3667,7 +3667,7 @@
         },
         "module_name": "//sql:sql_unittests",
         "module_scheme": "gtest",
-        "name": "sql_unittests iPad Air (6th generation) 26.1",
+        "name": "sql_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3687,11 +3687,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3699,18 +3699,18 @@
         },
         "test": "sql_unittests",
         "test_id_prefix": "ninja://sql:sql_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3718,7 +3718,7 @@
         },
         "module_name": "//sql:sql_unittests",
         "module_scheme": "gtest",
-        "name": "sql_unittests iPhone 16 26.1",
+        "name": "sql_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3738,11 +3738,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3750,18 +3750,18 @@
         },
         "test": "sql_unittests",
         "test_id_prefix": "ninja://sql:sql_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3769,7 +3769,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPad Air (6th generation) 26.1",
+        "name": "ui_base_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3789,11 +3789,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3801,18 +3801,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3820,7 +3820,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPhone 16 26.1",
+        "name": "ui_base_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3840,11 +3840,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3852,18 +3852,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3871,7 +3871,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ui_base_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3891,11 +3891,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3903,18 +3903,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3922,7 +3922,7 @@
         },
         "module_name": "//url:url_unittests",
         "module_scheme": "gtest",
-        "name": "url_unittests iPad Air (6th generation) 26.1",
+        "name": "url_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3942,11 +3942,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3954,18 +3954,18 @@
         },
         "test": "url_unittests",
         "test_id_prefix": "ninja://url:url_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3973,7 +3973,7 @@
         },
         "module_name": "//url:url_unittests",
         "module_scheme": "gtest",
-        "name": "url_unittests iPhone 16 26.1",
+        "name": "url_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3993,11 +3993,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4005,7 +4005,7 @@
         },
         "test": "url_unittests",
         "test_id_prefix": "ninja://url:url_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       }
     ]
   }
diff --git a/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json b/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json
index 930c95f..d3262d1 100644
--- a/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json
+++ b/infra/config/generated/builders/ci/ios26-sdk-simulator/properties.json
@@ -69,5 +69,5 @@
   },
   "builder_group": "chromium.fyi",
   "recipe": "chromium",
-  "xcode_build_version": "17b54"
+  "xcode_build_version": "17c5013i"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json
index d71fdf09..28580ac6 100644
--- a/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json
+++ b/infra/config/generated/builders/ci/ios26-sdk-simulator/targets/chromium.fyi.json
@@ -9,11 +9,11 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -21,7 +21,7 @@
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
         "module_scheme": "gtest",
-        "name": "absl_hardening_tests iPad Air (6th generation) 26.1",
+        "name": "absl_hardening_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -41,11 +41,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -53,18 +53,18 @@
         },
         "test": "absl_hardening_tests",
         "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -72,7 +72,7 @@
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
         "module_scheme": "gtest",
-        "name": "absl_hardening_tests iPhone 16 26.1",
+        "name": "absl_hardening_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -92,11 +92,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -104,18 +104,18 @@
         },
         "test": "absl_hardening_tests",
         "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -123,7 +123,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPad Air (6th generation) 26.1",
+        "name": "base_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -143,11 +143,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -155,18 +155,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -174,7 +174,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPhone 16 26.1",
+        "name": "base_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -194,11 +194,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -206,18 +206,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -225,7 +225,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPhone SE (3rd generation) 26.1",
+        "name": "base_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -245,11 +245,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -257,18 +257,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -276,7 +276,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_crypto_tests iPad Air (6th generation) 26.1",
+        "name": "boringssl_crypto_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -296,11 +296,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -308,18 +308,18 @@
         },
         "test": "boringssl_crypto_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -327,7 +327,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_crypto_tests iPhone 16 26.1",
+        "name": "boringssl_crypto_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -347,11 +347,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -359,18 +359,18 @@
         },
         "test": "boringssl_crypto_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -378,7 +378,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_ssl_tests iPad Air (6th generation) 26.1",
+        "name": "boringssl_ssl_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -398,11 +398,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -410,18 +410,18 @@
         },
         "test": "boringssl_ssl_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -429,7 +429,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_ssl_tests iPhone 16 26.1",
+        "name": "boringssl_ssl_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -449,11 +449,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -461,18 +461,18 @@
         },
         "test": "boringssl_ssl_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -480,7 +480,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPad Air (6th generation) 26.1",
+        "name": "components_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -500,11 +500,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -512,18 +512,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -531,7 +531,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPhone 16 26.1",
+        "name": "components_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -551,11 +551,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -563,18 +563,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -582,7 +582,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPhone SE (3rd generation) 26.1",
+        "name": "components_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -602,11 +602,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -614,18 +614,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -633,7 +633,7 @@
         },
         "module_name": "//crypto:crypto_unittests",
         "module_scheme": "gtest",
-        "name": "crypto_unittests iPad Air (6th generation) 26.1",
+        "name": "crypto_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -653,11 +653,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -665,18 +665,18 @@
         },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -684,7 +684,7 @@
         },
         "module_name": "//crypto:crypto_unittests",
         "module_scheme": "gtest",
-        "name": "crypto_unittests iPhone 16 26.1",
+        "name": "crypto_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -704,11 +704,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -716,18 +716,18 @@
         },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -735,7 +735,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPad Air (6th generation) 26.1",
+        "name": "gfx_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -755,11 +755,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -767,18 +767,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -786,7 +786,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPhone 16 26.1",
+        "name": "gfx_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -806,11 +806,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -818,18 +818,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -837,7 +837,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPhone SE (3rd generation) 26.1",
+        "name": "gfx_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -857,11 +857,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -869,18 +869,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -888,7 +888,7 @@
         },
         "module_name": "//google_apis:google_apis_unittests",
         "module_scheme": "gtest",
-        "name": "google_apis_unittests iPad Air (6th generation) 26.1",
+        "name": "google_apis_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -908,11 +908,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -920,18 +920,18 @@
         },
         "test": "google_apis_unittests",
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -939,7 +939,7 @@
         },
         "module_name": "//google_apis:google_apis_unittests",
         "module_scheme": "gtest",
-        "name": "google_apis_unittests iPhone 16 26.1",
+        "name": "google_apis_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -959,11 +959,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -971,18 +971,18 @@
         },
         "test": "google_apis_unittests",
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -990,7 +990,7 @@
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
         "module_scheme": "gtest",
-        "name": "gwp_asan_unittests iPad Air (6th generation) 26.1",
+        "name": "gwp_asan_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1010,11 +1010,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1022,18 +1022,18 @@
         },
         "test": "gwp_asan_unittests",
         "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1041,7 +1041,7 @@
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
         "module_scheme": "gtest",
-        "name": "gwp_asan_unittests iPhone 16 26.1",
+        "name": "gwp_asan_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1061,11 +1061,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1073,19 +1073,19 @@
         },
         "test": "gwp_asan_unittests",
         "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1093,7 +1093,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1113,11 +1113,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1126,19 +1126,19 @@
         },
         "test": "ios_chrome_bookmarks_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1146,7 +1146,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1166,11 +1166,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1179,7 +1179,7 @@
         },
         "test": "ios_chrome_bookmarks_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1188,12 +1188,12 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1201,7 +1201,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1221,11 +1221,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1234,7 +1234,7 @@
         },
         "test": "ios_chrome_integration_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1243,12 +1243,12 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1256,7 +1256,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1276,11 +1276,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1289,7 +1289,7 @@
         },
         "test": "ios_chrome_integration_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1298,12 +1298,12 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1311,7 +1311,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1331,11 +1331,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1344,7 +1344,7 @@
         },
         "test": "ios_chrome_settings_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1353,12 +1353,12 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1366,7 +1366,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1386,11 +1386,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1399,19 +1399,19 @@
         },
         "test": "ios_chrome_settings_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1419,7 +1419,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1439,11 +1439,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1452,19 +1452,19 @@
         },
         "test": "ios_chrome_signin_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1472,7 +1472,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1492,11 +1492,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1505,19 +1505,19 @@
         },
         "test": "ios_chrome_signin_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1525,7 +1525,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1545,11 +1545,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1557,19 +1557,19 @@
         },
         "test": "ios_chrome_smoke_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1577,7 +1577,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1597,11 +1597,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1609,7 +1609,7 @@
         },
         "test": "ios_chrome_smoke_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1618,12 +1618,12 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1631,7 +1631,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1651,11 +1651,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1664,7 +1664,7 @@
         },
         "test": "ios_chrome_ui_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1673,12 +1673,12 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1686,7 +1686,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1706,11 +1706,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1719,18 +1719,18 @@
         },
         "test": "ios_chrome_ui_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1738,7 +1738,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1758,11 +1758,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1770,18 +1770,18 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1789,7 +1789,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPhone 16 26.1",
+        "name": "ios_chrome_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1809,11 +1809,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1821,18 +1821,18 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1840,7 +1840,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1860,11 +1860,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1872,19 +1872,19 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1892,7 +1892,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1912,11 +1912,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1925,19 +1925,19 @@
         },
         "test": "ios_chrome_web_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1945,7 +1945,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_web_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_web_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1965,11 +1965,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1978,18 +1978,18 @@
         },
         "test": "ios_chrome_web_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1997,7 +1997,7 @@
         },
         "module_name": "//ios/components:ios_components_unittests",
         "module_scheme": "gtest",
-        "name": "ios_components_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_components_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2017,11 +2017,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2029,18 +2029,18 @@
         },
         "test": "ios_components_unittests",
         "test_id_prefix": "ninja://ios/components:ios_components_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2048,7 +2048,7 @@
         },
         "module_name": "//ios/components:ios_components_unittests",
         "module_scheme": "gtest",
-        "name": "ios_components_unittests iPhone 16 26.1",
+        "name": "ios_components_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2068,11 +2068,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2080,18 +2080,18 @@
         },
         "test": "ios_components_unittests",
         "test_id_prefix": "ninja://ios/components:ios_components_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2099,7 +2099,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2119,11 +2119,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2131,18 +2131,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2150,7 +2150,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPhone 16 26.1",
+        "name": "ios_credential_provider_extension_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2170,11 +2170,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2182,18 +2182,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2201,7 +2201,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2221,11 +2221,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2233,18 +2233,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2252,7 +2252,7 @@
         },
         "module_name": "//ios/net:ios_net_unittests",
         "module_scheme": "gtest",
-        "name": "ios_net_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_net_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2272,11 +2272,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2285,18 +2285,18 @@
         },
         "test": "ios_net_unittests",
         "test_id_prefix": "ninja://ios/net:ios_net_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2304,7 +2304,7 @@
         },
         "module_name": "//ios/net:ios_net_unittests",
         "module_scheme": "gtest",
-        "name": "ios_net_unittests iPhone 16 26.1",
+        "name": "ios_net_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2324,11 +2324,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2337,18 +2337,18 @@
         },
         "test": "ios_net_unittests",
         "test_id_prefix": "ninja://ios/net:ios_net_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2356,7 +2356,7 @@
         },
         "module_name": "//ios/testing:ios_testing_unittests",
         "module_scheme": "gtest",
-        "name": "ios_testing_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_testing_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2376,11 +2376,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2388,18 +2388,18 @@
         },
         "test": "ios_testing_unittests",
         "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2407,7 +2407,7 @@
         },
         "module_name": "//ios/testing:ios_testing_unittests",
         "module_scheme": "gtest",
-        "name": "ios_testing_unittests iPhone 16 26.1",
+        "name": "ios_testing_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2427,11 +2427,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2439,18 +2439,18 @@
         },
         "test": "ios_testing_unittests",
         "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2458,7 +2458,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPad Air (6th generation) 26.1",
+        "name": "ios_web_inttests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2478,11 +2478,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2490,18 +2490,18 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2509,7 +2509,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPhone 16 26.1",
+        "name": "ios_web_inttests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2529,11 +2529,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2541,18 +2541,18 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2560,7 +2560,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_inttests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2580,11 +2580,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2592,19 +2592,19 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2612,7 +2612,7 @@
         },
         "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2632,11 +2632,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2644,19 +2644,19 @@
         },
         "test": "ios_web_shell_eg2tests_module",
         "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2664,7 +2664,7 @@
         },
         "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_web_shell_eg2tests_module iPhone 16 26.1",
+        "name": "ios_web_shell_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2684,11 +2684,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2696,18 +2696,18 @@
         },
         "test": "ios_web_shell_eg2tests_module",
         "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2715,7 +2715,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_web_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2735,11 +2735,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2747,18 +2747,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2766,7 +2766,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPhone 16 26.1",
+        "name": "ios_web_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2786,11 +2786,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2798,18 +2798,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2817,7 +2817,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2837,11 +2837,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2849,18 +2849,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2868,7 +2868,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPad Air (6th generation) 26.1",
+        "name": "ios_web_view_inttests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2888,11 +2888,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2900,18 +2900,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2919,7 +2919,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPhone 16 26.1",
+        "name": "ios_web_view_inttests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2939,11 +2939,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2951,18 +2951,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2970,7 +2970,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2990,11 +2990,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3002,18 +3002,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3021,7 +3021,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_web_view_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3041,11 +3041,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3053,18 +3053,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3072,7 +3072,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPhone 16 26.1",
+        "name": "ios_web_view_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3092,11 +3092,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3104,18 +3104,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3123,7 +3123,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3143,11 +3143,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3155,18 +3155,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3174,7 +3174,7 @@
         },
         "module_name": "//net:net_unittests",
         "module_scheme": "gtest",
-        "name": "net_unittests iPad Air (6th generation) 26.1",
+        "name": "net_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3194,11 +3194,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3206,18 +3206,18 @@
         },
         "test": "net_unittests",
         "test_id_prefix": "ninja://net:net_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3225,7 +3225,7 @@
         },
         "module_name": "//net:net_unittests",
         "module_scheme": "gtest",
-        "name": "net_unittests iPhone 16 26.1",
+        "name": "net_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3245,11 +3245,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3257,18 +3257,18 @@
         },
         "test": "net_unittests",
         "test_id_prefix": "ninja://net:net_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3276,7 +3276,7 @@
         },
         "module_name": "//services:services_unittests",
         "module_scheme": "gtest",
-        "name": "services_unittests iPad Air (6th generation) 26.1",
+        "name": "services_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3296,11 +3296,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3308,18 +3308,18 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3327,7 +3327,7 @@
         },
         "module_name": "//services:services_unittests",
         "module_scheme": "gtest",
-        "name": "services_unittests iPhone 16 26.1",
+        "name": "services_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3347,11 +3347,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3359,18 +3359,18 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3378,7 +3378,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPad Air (6th generation) 26.1",
+        "name": "skia_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3398,11 +3398,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3410,18 +3410,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3429,7 +3429,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPhone 16 26.1",
+        "name": "skia_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3449,11 +3449,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3461,18 +3461,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3480,7 +3480,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPhone SE (3rd generation) 26.1",
+        "name": "skia_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3500,11 +3500,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3512,18 +3512,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3531,7 +3531,7 @@
         },
         "module_name": "//sql:sql_unittests",
         "module_scheme": "gtest",
-        "name": "sql_unittests iPad Air (6th generation) 26.1",
+        "name": "sql_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3551,11 +3551,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3563,18 +3563,18 @@
         },
         "test": "sql_unittests",
         "test_id_prefix": "ninja://sql:sql_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3582,7 +3582,7 @@
         },
         "module_name": "//sql:sql_unittests",
         "module_scheme": "gtest",
-        "name": "sql_unittests iPhone 16 26.1",
+        "name": "sql_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3602,11 +3602,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3614,18 +3614,18 @@
         },
         "test": "sql_unittests",
         "test_id_prefix": "ninja://sql:sql_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3633,7 +3633,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPad Air (6th generation) 26.1",
+        "name": "ui_base_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3653,11 +3653,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3665,18 +3665,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3684,7 +3684,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPhone 16 26.1",
+        "name": "ui_base_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3704,11 +3704,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3716,18 +3716,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3735,7 +3735,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ui_base_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3755,11 +3755,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3767,18 +3767,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3786,7 +3786,7 @@
         },
         "module_name": "//url:url_unittests",
         "module_scheme": "gtest",
-        "name": "url_unittests iPad Air (6th generation) 26.1",
+        "name": "url_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3806,11 +3806,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3818,18 +3818,18 @@
         },
         "test": "url_unittests",
         "test_id_prefix": "ninja://url:url_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3837,7 +3837,7 @@
         },
         "module_name": "//url:url_unittests",
         "module_scheme": "gtest",
-        "name": "url_unittests iPhone 16 26.1",
+        "name": "url_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3857,11 +3857,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3869,7 +3869,7 @@
         },
         "test": "url_unittests",
         "test_id_prefix": "ninja://url:url_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       }
     ]
   }
diff --git a/infra/config/generated/builders/ci/mac-arm64-rel/targets/chromium.mac.json b/infra/config/generated/builders/ci/mac-arm64-rel/targets/chromium.mac.json
index f2fb6f9..9b10bcf 100644
--- a/infra/config/generated/builders/ci/mac-arm64-rel/targets/chromium.mac.json
+++ b/infra/config/generated/builders/ci/mac-arm64-rel/targets/chromium.mac.json
@@ -6459,7 +6459,7 @@
             }
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 7
+          "shards": 8
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/builders/ci/mac15-arm64-rel-tests/targets/chromium.mac.json b/infra/config/generated/builders/ci/mac15-arm64-rel-tests/targets/chromium.mac.json
index 8ed8365..1bdaf37 100644
--- a/infra/config/generated/builders/ci/mac15-arm64-rel-tests/targets/chromium.mac.json
+++ b/infra/config/generated/builders/ci/mac15-arm64-rel-tests/targets/chromium.mac.json
@@ -931,7 +931,7 @@
             }
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 7
+          "shards": 8
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json b/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json
index 830c4b7..8210195 100644
--- a/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json
+++ b/infra/config/generated/builders/try/ios-blink-rel-fyi/properties.json
@@ -63,5 +63,5 @@
   },
   "builder_group": "tryserver.chromium.mac",
   "recipe": "chromium_trybot",
-  "xcode_build_version": "17b54"
+  "xcode_build_version": "17c5013i"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json
index 4ea22f1..15b3f4d 100644
--- a/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json
+++ b/infra/config/generated/builders/try/ios-blink-rel-fyi/targets/chromium.fyi.json
@@ -9,7 +9,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -21,7 +21,7 @@
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
         "module_scheme": "gtest",
-        "name": "absl_hardening_tests iPhone 15 26.1",
+        "name": "absl_hardening_tests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -40,8 +40,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -52,14 +52,14 @@
         },
         "test": "absl_hardening_tests",
         "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -71,7 +71,7 @@
         },
         "module_name": "//third_party/angle/src/tests:angle_unittests",
         "module_scheme": "gtest",
-        "name": "angle_unittests iPhone 15 26.1",
+        "name": "angle_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -90,8 +90,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -103,7 +103,7 @@
         "test": "angle_unittests",
         "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/",
         "use_isolated_scripts_api": true,
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -112,7 +112,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -124,7 +124,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPhone 15 26.1",
+        "name": "base_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -143,8 +143,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -155,14 +155,14 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -174,7 +174,7 @@
         },
         "module_name": "//third_party/blink/common:blink_common_unittests",
         "module_scheme": "gtest",
-        "name": "blink_common_unittests iPhone 15 26.1",
+        "name": "blink_common_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -193,8 +193,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -205,14 +205,14 @@
         },
         "test": "blink_common_unittests",
         "test_id_prefix": "ninja://third_party/blink/common:blink_common_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -224,7 +224,7 @@
         },
         "module_name": "//third_party/blink/renderer/platform:blink_fuzzer_unittests",
         "module_scheme": "gtest",
-        "name": "blink_fuzzer_unittests iPhone 15 26.1",
+        "name": "blink_fuzzer_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -243,8 +243,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -255,14 +255,14 @@
         },
         "test": "blink_fuzzer_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_fuzzer_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -274,7 +274,7 @@
         },
         "module_name": "//third_party/blink/renderer/platform/heap:blink_heap_unittests",
         "module_scheme": "gtest",
-        "name": "blink_heap_unittests iPhone 15 26.1",
+        "name": "blink_heap_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -293,8 +293,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -305,7 +305,7 @@
         },
         "test": "blink_heap_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/platform/heap:blink_heap_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -315,7 +315,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -327,7 +327,7 @@
         },
         "module_name": "//third_party/blink/renderer/platform:blink_platform_unittests",
         "module_scheme": "gtest",
-        "name": "blink_platform_unittests iPhone 15 26.1",
+        "name": "blink_platform_unittests iPhone 15 26.2",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
           "--gerrit-patchset=${patch_set}",
@@ -351,8 +351,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -363,14 +363,14 @@
         },
         "test": "blink_platform_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_platform_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -382,7 +382,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_crypto_tests iPhone 15 26.1",
+        "name": "boringssl_crypto_tests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -401,8 +401,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -413,14 +413,14 @@
         },
         "test": "boringssl_crypto_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -432,7 +432,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_ssl_tests iPhone 15 26.1",
+        "name": "boringssl_ssl_tests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -451,8 +451,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -463,14 +463,14 @@
         },
         "test": "boringssl_ssl_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -482,7 +482,7 @@
         },
         "module_name": "//media/capture:capture_unittests",
         "module_scheme": "gtest",
-        "name": "capture_unittests iPhone 15 26.1",
+        "name": "capture_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -501,8 +501,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -513,14 +513,14 @@
         },
         "test": "capture_unittests",
         "test_id_prefix": "ninja://media/capture:capture_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -532,7 +532,7 @@
         },
         "module_name": "//media/cast:cast_unittests",
         "module_scheme": "gtest",
-        "name": "cast_unittests iPhone 15 26.1",
+        "name": "cast_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -551,8 +551,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -563,7 +563,7 @@
         },
         "test": "cast_unittests",
         "test_id_prefix": "ninja://media/cast:cast_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -573,7 +573,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -585,7 +585,7 @@
         },
         "module_name": "//cc:cc_unittests",
         "module_scheme": "gtest",
-        "name": "cc_unittests iPhone 15 26.1",
+        "name": "cc_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -604,8 +604,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -616,7 +616,7 @@
         },
         "test": "cc_unittests",
         "test_id_prefix": "ninja://cc:cc_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -625,7 +625,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -637,7 +637,7 @@
         },
         "module_name": "//components:components_browsertests",
         "module_scheme": "gtest",
-        "name": "components_browsertests iPhone 15 26.1",
+        "name": "components_browsertests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -656,8 +656,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -668,7 +668,7 @@
         },
         "test": "components_browsertests",
         "test_id_prefix": "ninja://components:components_browsertests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -677,7 +677,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -689,7 +689,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPhone 15 26.1",
+        "name": "components_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -708,8 +708,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -720,7 +720,7 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -729,7 +729,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -741,7 +741,7 @@
         },
         "module_name": "//ui/compositor:compositor_unittests",
         "module_scheme": "gtest",
-        "name": "compositor_unittests iPhone 15 26.1",
+        "name": "compositor_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -760,8 +760,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -772,7 +772,7 @@
         },
         "test": "compositor_unittests",
         "test_id_prefix": "ninja://ui/compositor:compositor_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -781,7 +781,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -793,7 +793,7 @@
         },
         "module_name": "//content/test:content_browsertests",
         "module_scheme": "gtest",
-        "name": "content_browsertests iPhone 15 26.1",
+        "name": "content_browsertests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -812,8 +812,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -825,7 +825,7 @@
         },
         "test": "content_browsertests",
         "test_id_prefix": "ninja://content/test:content_browsertests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -834,7 +834,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -846,7 +846,7 @@
         },
         "module_name": "//content/test:content_unittests",
         "module_scheme": "gtest",
-        "name": "content_unittests iPhone 15 26.1",
+        "name": "content_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -865,8 +865,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -877,14 +877,14 @@
         },
         "test": "content_unittests",
         "test_id_prefix": "ninja://content/test:content_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -896,7 +896,7 @@
         },
         "module_name": "//third_party/crashpad/crashpad:crashpad_tests",
         "module_scheme": "gtest",
-        "name": "crashpad_tests iPhone 15 26.1",
+        "name": "crashpad_tests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -915,8 +915,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -927,14 +927,14 @@
         },
         "test": "crashpad_tests",
         "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -946,7 +946,7 @@
         },
         "module_name": "//crypto:crypto_unittests",
         "module_scheme": "gtest",
-        "name": "crypto_unittests iPhone 15 26.1",
+        "name": "crypto_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -965,8 +965,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -977,14 +977,14 @@
         },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -996,7 +996,7 @@
         },
         "module_name": "//device:device_unittests",
         "module_scheme": "gtest",
-        "name": "device_unittests iPhone 15 26.1",
+        "name": "device_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1015,8 +1015,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1027,14 +1027,14 @@
         },
         "test": "device_unittests",
         "test_id_prefix": "ninja://device:device_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1046,7 +1046,7 @@
         },
         "module_name": "//ui/display:display_unittests",
         "module_scheme": "gtest",
-        "name": "display_unittests iPhone 15 26.1",
+        "name": "display_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1065,8 +1065,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1077,14 +1077,14 @@
         },
         "test": "display_unittests",
         "test_id_prefix": "ninja://ui/display:display_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1096,7 +1096,7 @@
         },
         "module_name": "//third_party/leveldatabase:env_chromium_unittests",
         "module_scheme": "gtest",
-        "name": "env_chromium_unittests iPhone 15 26.1",
+        "name": "env_chromium_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1115,8 +1115,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1127,14 +1127,14 @@
         },
         "test": "env_chromium_unittests",
         "test_id_prefix": "ninja://third_party/leveldatabase:env_chromium_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1146,7 +1146,7 @@
         },
         "module_name": "//ui/events:events_unittests",
         "module_scheme": "gtest",
-        "name": "events_unittests iPhone 15 26.1",
+        "name": "events_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1165,8 +1165,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1177,14 +1177,14 @@
         },
         "test": "events_unittests",
         "test_id_prefix": "ninja://ui/events:events_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1196,7 +1196,7 @@
         },
         "module_name": "//google_apis/gcm:gcm_unit_tests",
         "module_scheme": "gtest",
-        "name": "gcm_unit_tests iPhone 15 26.1",
+        "name": "gcm_unit_tests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1215,8 +1215,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1227,7 +1227,7 @@
         },
         "test": "gcm_unit_tests",
         "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1236,7 +1236,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1248,7 +1248,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPhone 15 26.1",
+        "name": "gfx_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1267,8 +1267,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1279,14 +1279,14 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1298,7 +1298,7 @@
         },
         "module_name": "//gin:gin_unittests",
         "module_scheme": "gtest",
-        "name": "gin_unittests iPhone 15 26.1",
+        "name": "gin_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1317,8 +1317,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1329,14 +1329,14 @@
         },
         "test": "gin_unittests",
         "test_id_prefix": "ninja://gin:gin_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1348,7 +1348,7 @@
         },
         "module_name": "//ui/gl:gl_unittests",
         "module_scheme": "gtest",
-        "name": "gl_unittests iPhone 15 26.1",
+        "name": "gl_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1367,8 +1367,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1379,14 +1379,14 @@
         },
         "test": "gl_unittests",
         "test_id_prefix": "ninja://ui/gl:gl_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1398,7 +1398,7 @@
         },
         "module_name": "//google_apis:google_apis_unittests",
         "module_scheme": "gtest",
-        "name": "google_apis_unittests iPhone 15 26.1",
+        "name": "google_apis_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1417,8 +1417,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1429,7 +1429,7 @@
         },
         "test": "google_apis_unittests",
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1438,7 +1438,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1450,7 +1450,7 @@
         },
         "module_name": "//gpu:gpu_unittests",
         "module_scheme": "gtest",
-        "name": "gpu_unittests iPhone 15 26.1",
+        "name": "gpu_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1469,8 +1469,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1481,14 +1481,14 @@
         },
         "test": "gpu_unittests",
         "test_id_prefix": "ninja://gpu:gpu_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1500,7 +1500,7 @@
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
         "module_scheme": "gtest",
-        "name": "gwp_asan_unittests iPhone 15 26.1",
+        "name": "gwp_asan_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1519,8 +1519,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1531,14 +1531,14 @@
         },
         "test": "gwp_asan_unittests",
         "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1550,7 +1550,7 @@
         },
         "module_name": "//ui/latency:latency_unittests",
         "module_scheme": "gtest",
-        "name": "latency_unittests iPhone 15 26.1",
+        "name": "latency_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1569,8 +1569,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1581,14 +1581,14 @@
         },
         "test": "latency_unittests",
         "test_id_prefix": "ninja://ui/latency:latency_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1600,7 +1600,7 @@
         },
         "module_name": "//third_party/leveldatabase:leveldb_unittests",
         "module_scheme": "gtest",
-        "name": "leveldb_unittests iPhone 15 26.1",
+        "name": "leveldb_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1619,8 +1619,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1631,14 +1631,14 @@
         },
         "test": "leveldb_unittests",
         "test_id_prefix": "ninja://third_party/leveldatabase:leveldb_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1650,7 +1650,7 @@
         },
         "module_name": "//third_party/libjingle_xmpp:libjingle_xmpp_unittests",
         "module_scheme": "gtest",
-        "name": "libjingle_xmpp_unittests iPhone 15 26.1",
+        "name": "libjingle_xmpp_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1669,8 +1669,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1681,14 +1681,14 @@
         },
         "test": "libjingle_xmpp_unittests",
         "test_id_prefix": "ninja://third_party/libjingle_xmpp:libjingle_xmpp_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1700,7 +1700,7 @@
         },
         "module_name": "//third_party/liburlpattern:liburlpattern_unittests",
         "module_scheme": "gtest",
-        "name": "liburlpattern_unittests iPhone 15 26.1",
+        "name": "liburlpattern_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1719,8 +1719,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1731,7 +1731,7 @@
         },
         "test": "liburlpattern_unittests",
         "test_id_prefix": "ninja://third_party/liburlpattern:liburlpattern_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1740,7 +1740,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1752,7 +1752,7 @@
         },
         "module_name": "//media:media_unittests",
         "module_scheme": "gtest",
-        "name": "media_unittests iPhone 15 26.1",
+        "name": "media_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1771,8 +1771,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1783,7 +1783,7 @@
         },
         "test": "media_unittests",
         "test_id_prefix": "ninja://media:media_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1796,7 +1796,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1808,7 +1808,7 @@
         },
         "module_name": "//media:media_unittests",
         "module_scheme": "gtest",
-        "name": "media_unittests_skia_graphite_dawn iPhone 15 26.1",
+        "name": "media_unittests_skia_graphite_dawn iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1827,8 +1827,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1839,7 +1839,7 @@
         },
         "test": "media_unittests",
         "test_id_prefix": "ninja://media:media_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1852,7 +1852,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1864,7 +1864,7 @@
         },
         "module_name": "//media:media_unittests",
         "module_scheme": "gtest",
-        "name": "media_unittests_skia_graphite_metal iPhone 15 26.1",
+        "name": "media_unittests_skia_graphite_metal iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1883,8 +1883,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1895,14 +1895,14 @@
         },
         "test": "media_unittests",
         "test_id_prefix": "ninja://media:media_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1914,7 +1914,7 @@
         },
         "module_name": "//media/midi:midi_unittests",
         "module_scheme": "gtest",
-        "name": "midi_unittests iPhone 15 26.1",
+        "name": "midi_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1933,8 +1933,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1945,7 +1945,7 @@
         },
         "test": "midi_unittests",
         "test_id_prefix": "ninja://media/midi:midi_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -1954,7 +1954,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -1966,7 +1966,7 @@
         },
         "module_name": "//mojo:mojo_unittests",
         "module_scheme": "gtest",
-        "name": "mojo_unittests iPhone 15 26.1",
+        "name": "mojo_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1985,8 +1985,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -1997,14 +1997,14 @@
         },
         "test": "mojo_unittests",
         "test_id_prefix": "ninja://mojo:mojo_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2016,7 +2016,7 @@
         },
         "module_name": "//ui/native_theme:native_theme_unittests",
         "module_scheme": "gtest",
-        "name": "native_theme_unittests iPhone 15 26.1",
+        "name": "native_theme_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2035,8 +2035,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2047,14 +2047,14 @@
         },
         "test": "native_theme_unittests",
         "test_id_prefix": "ninja://ui/native_theme:native_theme_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2066,7 +2066,7 @@
         },
         "module_name": "//net:net_unittests",
         "module_scheme": "gtest",
-        "name": "net_unittests iPhone 15 26.1",
+        "name": "net_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2085,8 +2085,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2097,14 +2097,14 @@
         },
         "test": "net_unittests",
         "test_id_prefix": "ninja://net:net_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2116,7 +2116,7 @@
         },
         "module_name": "//third_party/perfetto:perfetto_unittests",
         "module_scheme": "gtest",
-        "name": "perfetto_unittests iPhone 15 26.1",
+        "name": "perfetto_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2135,8 +2135,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2147,14 +2147,14 @@
         },
         "test": "perfetto_unittests",
         "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2166,7 +2166,7 @@
         },
         "module_name": "//printing:printing_unittests",
         "module_scheme": "gtest",
-        "name": "printing_unittests iPhone 15 26.1",
+        "name": "printing_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2185,8 +2185,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2197,14 +2197,14 @@
         },
         "test": "printing_unittests",
         "test_id_prefix": "ninja://printing:printing_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2216,7 +2216,7 @@
         },
         "module_name": "//sandbox:sandbox_unittests",
         "module_scheme": "gtest",
-        "name": "sandbox_unittests iPhone 15 26.1",
+        "name": "sandbox_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2235,8 +2235,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2247,7 +2247,7 @@
         },
         "test": "sandbox_unittests",
         "test_id_prefix": "ninja://sandbox:sandbox_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -2255,7 +2255,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2267,7 +2267,7 @@
         },
         "module_name": "//services:services_unittests",
         "module_scheme": "gtest",
-        "name": "services_unittests iPhone 15 26.1",
+        "name": "services_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2286,8 +2286,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2298,14 +2298,14 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2317,7 +2317,7 @@
         },
         "module_name": "//ui/shell_dialogs:shell_dialogs_unittests",
         "module_scheme": "gtest",
-        "name": "shell_dialogs_unittests iPhone 15 26.1",
+        "name": "shell_dialogs_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2336,8 +2336,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2348,14 +2348,14 @@
         },
         "test": "shell_dialogs_unittests",
         "test_id_prefix": "ninja://ui/shell_dialogs:shell_dialogs_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2367,7 +2367,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPhone 15 26.1",
+        "name": "skia_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2386,8 +2386,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2398,14 +2398,14 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2417,7 +2417,7 @@
         },
         "module_name": "//sql:sql_unittests",
         "module_scheme": "gtest",
-        "name": "sql_unittests iPhone 15 26.1",
+        "name": "sql_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2436,8 +2436,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2448,14 +2448,14 @@
         },
         "test": "sql_unittests",
         "test_id_prefix": "ninja://sql:sql_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2467,7 +2467,7 @@
         },
         "module_name": "//storage:storage_unittests",
         "module_scheme": "gtest",
-        "name": "storage_unittests iPhone 15 26.1",
+        "name": "storage_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2486,8 +2486,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2498,7 +2498,7 @@
         },
         "test": "storage_unittests",
         "test_id_prefix": "ninja://storage:storage_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -2506,7 +2506,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2518,7 +2518,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPhone 15 26.1",
+        "name": "ui_base_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2537,8 +2537,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2549,14 +2549,14 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2568,7 +2568,7 @@
         },
         "module_name": "//ui/touch_selection:ui_touch_selection_unittests",
         "module_scheme": "gtest",
-        "name": "ui_touch_selection_unittests iPhone 15 26.1",
+        "name": "ui_touch_selection_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2587,8 +2587,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2599,14 +2599,14 @@
         },
         "test": "ui_touch_selection_unittests",
         "test_id_prefix": "ninja://ui/touch_selection:ui_touch_selection_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2618,7 +2618,7 @@
         },
         "module_name": "//ui/tests:ui_unittests",
         "module_scheme": "gtest",
-        "name": "ui_unittests iPhone 15 26.1",
+        "name": "ui_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2637,8 +2637,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2649,14 +2649,14 @@
         },
         "test": "ui_unittests",
         "test_id_prefix": "ninja://ui/tests:ui_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2668,7 +2668,7 @@
         },
         "module_name": "//url:url_unittests",
         "module_scheme": "gtest",
-        "name": "url_unittests iPhone 15 26.1",
+        "name": "url_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2687,8 +2687,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2699,7 +2699,7 @@
         },
         "test": "url_unittests",
         "test_id_prefix": "ninja://url:url_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
@@ -2709,7 +2709,7 @@
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2721,7 +2721,7 @@
         },
         "module_name": "//components/viz:viz_unittests",
         "module_scheme": "gtest",
-        "name": "viz_unittests iPhone 15 26.1",
+        "name": "viz_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2740,8 +2740,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2752,14 +2752,14 @@
         },
         "test": "viz_unittests",
         "test_id_prefix": "ninja://components/viz:viz_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2771,7 +2771,7 @@
         },
         "module_name": "//third_party/blink/renderer/platform/wtf:wtf_unittests",
         "module_scheme": "gtest",
-        "name": "wtf_unittests iPhone 15 26.1",
+        "name": "wtf_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2790,8 +2790,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2802,14 +2802,14 @@
         },
         "test": "wtf_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/platform/wtf:wtf_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 15",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
@@ -2821,7 +2821,7 @@
         },
         "module_name": "//third_party/zlib:zlib_unittests",
         "module_scheme": "gtest",
-        "name": "zlib_unittests iPhone 15 26.1",
+        "name": "zlib_unittests iPhone 15 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2840,8 +2840,8 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
               "name": "xcode_ios_17a400",
@@ -2852,7 +2852,7 @@
         },
         "test": "zlib_unittests",
         "test_id_prefix": "ninja://third_party/zlib:zlib_unittests/",
-        "variant_id": "iPhone 15 26.1"
+        "variant_id": "iPhone 15 26.2"
       }
     ]
   }
diff --git a/infra/config/generated/builders/try/ios18-beta-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios18-beta-simulator/targets/chromium.fyi.json
index 99c3d80..d5b33d02 100644
--- a/infra/config/generated/builders/try/ios18-beta-simulator/targets/chromium.fyi.json
+++ b/infra/config/generated/builders/try/ios18-beta-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -45,7 +45,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -64,7 +64,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -96,7 +96,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -115,7 +115,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -147,7 +147,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -166,7 +166,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -198,7 +198,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -217,7 +217,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -249,7 +249,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -268,7 +268,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -300,7 +300,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -319,7 +319,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -351,7 +351,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -370,7 +370,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -402,7 +402,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -421,7 +421,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -453,7 +453,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -472,7 +472,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -504,7 +504,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -523,7 +523,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -555,7 +555,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -574,7 +574,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -606,7 +606,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -625,7 +625,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -657,7 +657,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -676,7 +676,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -708,7 +708,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -727,7 +727,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -759,7 +759,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -781,7 +781,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -813,7 +813,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -836,7 +836,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -868,7 +868,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -891,7 +891,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -923,7 +923,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -948,7 +948,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -980,7 +980,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1005,7 +1005,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1037,7 +1037,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1062,7 +1062,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1094,7 +1094,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1119,7 +1119,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1151,7 +1151,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1176,7 +1176,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1208,7 +1208,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1233,7 +1233,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1265,7 +1265,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1288,7 +1288,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1320,7 +1320,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1343,7 +1343,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1375,7 +1375,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1398,7 +1398,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1430,7 +1430,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1453,7 +1453,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1485,7 +1485,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1507,7 +1507,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1539,7 +1539,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1561,7 +1561,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1593,7 +1593,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1617,7 +1617,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1649,7 +1649,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1674,7 +1674,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1706,7 +1706,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1731,7 +1731,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1763,7 +1763,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1783,7 +1783,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1815,7 +1815,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1834,7 +1834,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1866,7 +1866,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1885,7 +1885,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1917,7 +1917,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1939,7 +1939,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1971,7 +1971,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1994,7 +1994,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2026,7 +2026,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2049,7 +2049,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2081,7 +2081,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2101,7 +2101,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2133,7 +2133,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2153,7 +2153,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2185,7 +2185,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2204,7 +2204,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2236,7 +2236,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2255,7 +2255,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2287,7 +2287,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2306,7 +2306,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2338,7 +2338,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2357,7 +2357,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2389,7 +2389,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2409,7 +2409,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2441,7 +2441,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2460,7 +2460,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2492,7 +2492,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2511,7 +2511,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2543,7 +2543,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2562,7 +2562,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2594,7 +2594,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2616,7 +2616,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2648,7 +2648,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2670,7 +2670,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2702,7 +2702,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2724,7 +2724,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2756,7 +2756,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2775,7 +2775,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2807,7 +2807,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2826,7 +2826,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2858,7 +2858,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2877,7 +2877,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2909,7 +2909,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2928,7 +2928,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2960,7 +2960,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2979,7 +2979,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3011,7 +3011,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3030,7 +3030,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3062,7 +3062,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3081,7 +3081,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3113,7 +3113,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3132,7 +3132,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3164,7 +3164,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3183,7 +3183,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3215,7 +3215,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3234,7 +3234,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3266,7 +3266,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3285,7 +3285,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3317,7 +3317,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3336,7 +3336,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3368,7 +3368,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3387,7 +3387,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3419,7 +3419,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3438,7 +3438,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3470,7 +3470,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3489,7 +3489,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3521,7 +3521,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3540,7 +3540,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3572,7 +3572,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3591,7 +3591,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3623,7 +3623,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3642,7 +3642,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3674,7 +3674,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3693,7 +3693,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3725,7 +3725,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
diff --git a/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json b/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json
index 5a9daa4..fef9b880 100644
--- a/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json
+++ b/infra/config/generated/builders/try/ios18-sdk-simulator/properties.json
@@ -62,5 +62,5 @@
   },
   "builder_group": "tryserver.chromium.mac",
   "recipe": "chromium_trybot",
-  "xcode_build_version": "17b54"
+  "xcode_build_version": "17c5013i"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json
index 46cd8fdc..6df5ec5 100644
--- a/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json
+++ b/infra/config/generated/builders/try/ios18-sdk-simulator/targets/chromium.fyi.json
@@ -13,7 +13,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -45,7 +45,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -64,7 +64,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -96,7 +96,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -115,7 +115,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -147,7 +147,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -166,7 +166,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -198,7 +198,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -217,7 +217,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -249,7 +249,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -268,7 +268,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -300,7 +300,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -319,7 +319,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -351,7 +351,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -370,7 +370,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -402,7 +402,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -421,7 +421,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -453,7 +453,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -472,7 +472,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -504,7 +504,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -523,7 +523,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -555,7 +555,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -574,7 +574,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -606,7 +606,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -625,7 +625,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -657,7 +657,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -676,7 +676,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -708,7 +708,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -727,7 +727,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -759,7 +759,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -778,7 +778,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -810,7 +810,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -829,7 +829,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -861,7 +861,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -880,7 +880,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -912,7 +912,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -931,7 +931,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -963,7 +963,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -982,7 +982,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1014,7 +1014,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1033,7 +1033,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1065,7 +1065,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1087,7 +1087,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1119,7 +1119,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1142,7 +1142,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1174,7 +1174,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1197,7 +1197,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1229,7 +1229,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1254,7 +1254,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1286,7 +1286,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1311,7 +1311,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1343,7 +1343,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1368,7 +1368,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1400,7 +1400,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1425,7 +1425,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1457,7 +1457,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1482,7 +1482,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1514,7 +1514,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1539,7 +1539,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1571,7 +1571,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1594,7 +1594,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1626,7 +1626,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1649,7 +1649,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1681,7 +1681,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1704,7 +1704,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1736,7 +1736,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1759,7 +1759,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1791,7 +1791,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1813,7 +1813,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1845,7 +1845,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1867,7 +1867,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1899,7 +1899,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1923,7 +1923,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1955,7 +1955,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1980,7 +1980,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2012,7 +2012,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2037,7 +2037,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2069,7 +2069,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2089,7 +2089,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2121,7 +2121,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2140,7 +2140,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2172,7 +2172,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2191,7 +2191,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2223,7 +2223,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2245,7 +2245,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2277,7 +2277,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2300,7 +2300,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2332,7 +2332,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2355,7 +2355,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2387,7 +2387,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2407,7 +2407,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2439,7 +2439,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2458,7 +2458,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2490,7 +2490,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2510,7 +2510,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2542,7 +2542,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2562,7 +2562,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2594,7 +2594,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2613,7 +2613,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2645,7 +2645,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2664,7 +2664,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2696,7 +2696,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2715,7 +2715,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2747,7 +2747,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2766,7 +2766,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2798,7 +2798,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2818,7 +2818,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2850,7 +2850,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2870,7 +2870,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2902,7 +2902,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2921,7 +2921,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2953,7 +2953,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2972,7 +2972,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3004,7 +3004,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3023,7 +3023,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3055,7 +3055,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3074,7 +3074,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3106,7 +3106,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3128,7 +3128,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3160,7 +3160,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3182,7 +3182,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3214,7 +3214,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3236,7 +3236,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3268,7 +3268,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3287,7 +3287,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3319,7 +3319,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3338,7 +3338,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3370,7 +3370,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3389,7 +3389,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3421,7 +3421,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3440,7 +3440,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3472,7 +3472,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3491,7 +3491,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3523,7 +3523,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3542,7 +3542,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3574,7 +3574,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3593,7 +3593,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3625,7 +3625,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3644,7 +3644,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3676,7 +3676,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3695,7 +3695,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3727,7 +3727,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3746,7 +3746,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3778,7 +3778,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3797,7 +3797,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3829,7 +3829,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3848,7 +3848,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3880,7 +3880,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3899,7 +3899,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3931,7 +3931,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3950,7 +3950,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3982,7 +3982,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4001,7 +4001,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4033,7 +4033,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4052,7 +4052,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4084,7 +4084,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4103,7 +4103,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4135,7 +4135,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4154,7 +4154,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4186,7 +4186,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4205,7 +4205,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4237,7 +4237,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4256,7 +4256,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4288,7 +4288,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4307,7 +4307,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4339,7 +4339,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4358,7 +4358,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4390,7 +4390,7 @@
               "path": "Runtime-ios-17.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4409,7 +4409,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -4441,7 +4441,7 @@
               "path": "Runtime-ios-18.5"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
diff --git a/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json
index cd0b4c7..ad21b7e 100644
--- a/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json
+++ b/infra/config/generated/builders/try/ios26-beta-simulator/targets/chromium.fyi.json
@@ -9,11 +9,11 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -21,7 +21,7 @@
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
         "module_scheme": "gtest",
-        "name": "absl_hardening_tests iPad Air (6th generation) 26.1",
+        "name": "absl_hardening_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -41,11 +41,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -53,18 +53,18 @@
         },
         "test": "absl_hardening_tests",
         "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -72,7 +72,7 @@
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
         "module_scheme": "gtest",
-        "name": "absl_hardening_tests iPhone 16 26.1",
+        "name": "absl_hardening_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -92,11 +92,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -104,18 +104,18 @@
         },
         "test": "absl_hardening_tests",
         "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -123,7 +123,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPad Air (6th generation) 26.1",
+        "name": "base_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -143,11 +143,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -155,18 +155,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -174,7 +174,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPhone 16 26.1",
+        "name": "base_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -194,11 +194,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -206,18 +206,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -225,7 +225,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPhone SE (3rd generation) 26.1",
+        "name": "base_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -245,11 +245,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -257,18 +257,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -276,7 +276,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_crypto_tests iPad Air (6th generation) 26.1",
+        "name": "boringssl_crypto_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -296,11 +296,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -308,18 +308,18 @@
         },
         "test": "boringssl_crypto_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -327,7 +327,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_crypto_tests iPhone 16 26.1",
+        "name": "boringssl_crypto_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -347,11 +347,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -359,18 +359,18 @@
         },
         "test": "boringssl_crypto_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -378,7 +378,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_ssl_tests iPad Air (6th generation) 26.1",
+        "name": "boringssl_ssl_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -398,11 +398,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -410,18 +410,18 @@
         },
         "test": "boringssl_ssl_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -429,7 +429,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_ssl_tests iPhone 16 26.1",
+        "name": "boringssl_ssl_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -449,11 +449,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -461,18 +461,18 @@
         },
         "test": "boringssl_ssl_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -480,7 +480,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPad Air (6th generation) 26.1",
+        "name": "components_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -500,11 +500,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -512,18 +512,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -531,7 +531,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPhone 16 26.1",
+        "name": "components_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -551,11 +551,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -563,18 +563,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -582,7 +582,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPhone SE (3rd generation) 26.1",
+        "name": "components_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -602,11 +602,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -614,18 +614,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -633,7 +633,7 @@
         },
         "module_name": "//crypto:crypto_unittests",
         "module_scheme": "gtest",
-        "name": "crypto_unittests iPad Air (6th generation) 26.1",
+        "name": "crypto_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -653,11 +653,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -665,18 +665,18 @@
         },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -684,7 +684,7 @@
         },
         "module_name": "//crypto:crypto_unittests",
         "module_scheme": "gtest",
-        "name": "crypto_unittests iPhone 16 26.1",
+        "name": "crypto_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -704,11 +704,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -716,18 +716,18 @@
         },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -735,7 +735,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPad Air (6th generation) 26.1",
+        "name": "gfx_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -755,11 +755,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -767,18 +767,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -786,7 +786,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPhone 16 26.1",
+        "name": "gfx_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -806,11 +806,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -818,18 +818,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -837,7 +837,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPhone SE (3rd generation) 26.1",
+        "name": "gfx_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -857,11 +857,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -869,18 +869,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -888,7 +888,7 @@
         },
         "module_name": "//google_apis:google_apis_unittests",
         "module_scheme": "gtest",
-        "name": "google_apis_unittests iPad Air (6th generation) 26.1",
+        "name": "google_apis_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -908,11 +908,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -920,18 +920,18 @@
         },
         "test": "google_apis_unittests",
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -939,7 +939,7 @@
         },
         "module_name": "//google_apis:google_apis_unittests",
         "module_scheme": "gtest",
-        "name": "google_apis_unittests iPhone 16 26.1",
+        "name": "google_apis_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -959,11 +959,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -971,18 +971,18 @@
         },
         "test": "google_apis_unittests",
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -990,7 +990,7 @@
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
         "module_scheme": "gtest",
-        "name": "gwp_asan_unittests iPad Air (6th generation) 26.1",
+        "name": "gwp_asan_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1010,11 +1010,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1022,18 +1022,18 @@
         },
         "test": "gwp_asan_unittests",
         "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1041,7 +1041,7 @@
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
         "module_scheme": "gtest",
-        "name": "gwp_asan_unittests iPhone 16 26.1",
+        "name": "gwp_asan_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1061,11 +1061,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1073,21 +1073,21 @@
         },
         "test": "gwp_asan_unittests",
         "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1095,7 +1095,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1115,11 +1115,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1128,21 +1128,21 @@
         },
         "test": "ios_chrome_bookmarks_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1150,7 +1150,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1170,11 +1170,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1183,7 +1183,7 @@
         },
         "test": "ios_chrome_bookmarks_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1192,14 +1192,14 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1207,7 +1207,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1227,11 +1227,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1240,7 +1240,7 @@
         },
         "test": "ios_chrome_integration_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1249,14 +1249,14 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1264,7 +1264,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1284,11 +1284,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1297,7 +1297,7 @@
         },
         "test": "ios_chrome_integration_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1306,14 +1306,14 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1321,7 +1321,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1341,11 +1341,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1354,7 +1354,7 @@
         },
         "test": "ios_chrome_settings_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1363,14 +1363,14 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1378,7 +1378,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1398,11 +1398,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1411,21 +1411,21 @@
         },
         "test": "ios_chrome_settings_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1433,7 +1433,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1453,11 +1453,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1466,21 +1466,21 @@
         },
         "test": "ios_chrome_signin_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1488,7 +1488,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1508,11 +1508,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1521,21 +1521,21 @@
         },
         "test": "ios_chrome_signin_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1543,7 +1543,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1563,11 +1563,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1575,21 +1575,21 @@
         },
         "test": "ios_chrome_smoke_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1597,7 +1597,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1617,11 +1617,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1629,7 +1629,7 @@
         },
         "test": "ios_chrome_smoke_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1638,14 +1638,14 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1653,7 +1653,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1673,11 +1673,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1686,7 +1686,7 @@
         },
         "test": "ios_chrome_ui_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1695,14 +1695,14 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1710,7 +1710,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1730,11 +1730,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1743,18 +1743,18 @@
         },
         "test": "ios_chrome_ui_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1762,7 +1762,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1782,11 +1782,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1794,18 +1794,18 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1813,7 +1813,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPhone 16 26.1",
+        "name": "ios_chrome_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1833,11 +1833,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1845,18 +1845,18 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1864,7 +1864,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1884,11 +1884,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1896,21 +1896,21 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1918,7 +1918,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1938,11 +1938,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1951,21 +1951,21 @@
         },
         "test": "ios_chrome_web_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1973,7 +1973,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_web_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_web_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1993,11 +1993,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2006,18 +2006,18 @@
         },
         "test": "ios_chrome_web_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2025,7 +2025,7 @@
         },
         "module_name": "//ios/components:ios_components_unittests",
         "module_scheme": "gtest",
-        "name": "ios_components_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_components_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2045,11 +2045,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2057,18 +2057,18 @@
         },
         "test": "ios_components_unittests",
         "test_id_prefix": "ninja://ios/components:ios_components_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2076,7 +2076,7 @@
         },
         "module_name": "//ios/components:ios_components_unittests",
         "module_scheme": "gtest",
-        "name": "ios_components_unittests iPhone 16 26.1",
+        "name": "ios_components_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2096,11 +2096,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2108,19 +2108,19 @@
         },
         "test": "ios_components_unittests",
         "test_id_prefix": "ninja://ios/components:ios_components_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2128,7 +2128,7 @@
         },
         "module_name": "//third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module",
         "module_scheme": "xctest",
-        "name": "ios_crash_xcuitests_module iPad Air (6th generation) 26.1",
+        "name": "ios_crash_xcuitests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2148,11 +2148,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2160,19 +2160,19 @@
         },
         "test": "ios_crash_xcuitests_module",
         "test_id_prefix": "ninja://third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2180,7 +2180,7 @@
         },
         "module_name": "//third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module",
         "module_scheme": "xctest",
-        "name": "ios_crash_xcuitests_module iPhone 16 26.1",
+        "name": "ios_crash_xcuitests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2200,11 +2200,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2212,18 +2212,18 @@
         },
         "test": "ios_crash_xcuitests_module",
         "test_id_prefix": "ninja://third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2231,7 +2231,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2251,11 +2251,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2263,18 +2263,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2282,7 +2282,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPhone 16 26.1",
+        "name": "ios_credential_provider_extension_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2302,11 +2302,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2314,18 +2314,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2333,7 +2333,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2353,11 +2353,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2365,18 +2365,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2384,7 +2384,7 @@
         },
         "module_name": "//ios/net:ios_net_unittests",
         "module_scheme": "gtest",
-        "name": "ios_net_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_net_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2404,11 +2404,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2417,18 +2417,18 @@
         },
         "test": "ios_net_unittests",
         "test_id_prefix": "ninja://ios/net:ios_net_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2436,7 +2436,7 @@
         },
         "module_name": "//ios/net:ios_net_unittests",
         "module_scheme": "gtest",
-        "name": "ios_net_unittests iPhone 16 26.1",
+        "name": "ios_net_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2456,11 +2456,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2469,18 +2469,18 @@
         },
         "test": "ios_net_unittests",
         "test_id_prefix": "ninja://ios/net:ios_net_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2488,7 +2488,7 @@
         },
         "module_name": "//ios/testing:ios_testing_unittests",
         "module_scheme": "gtest",
-        "name": "ios_testing_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_testing_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2508,11 +2508,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2520,18 +2520,18 @@
         },
         "test": "ios_testing_unittests",
         "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2539,7 +2539,7 @@
         },
         "module_name": "//ios/testing:ios_testing_unittests",
         "module_scheme": "gtest",
-        "name": "ios_testing_unittests iPhone 16 26.1",
+        "name": "ios_testing_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2559,11 +2559,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2571,18 +2571,18 @@
         },
         "test": "ios_testing_unittests",
         "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2590,7 +2590,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPad Air (6th generation) 26.1",
+        "name": "ios_web_inttests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2610,11 +2610,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2622,18 +2622,18 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2641,7 +2641,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPhone 16 26.1",
+        "name": "ios_web_inttests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2661,11 +2661,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2673,18 +2673,18 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2692,7 +2692,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_inttests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2712,11 +2712,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2724,21 +2724,21 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2746,7 +2746,7 @@
         },
         "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2766,11 +2766,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2778,21 +2778,21 @@
         },
         "test": "ios_web_shell_eg2tests_module",
         "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--record-video",
           "failed_only",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2800,7 +2800,7 @@
         },
         "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_web_shell_eg2tests_module iPhone 16 26.1",
+        "name": "ios_web_shell_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2820,11 +2820,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2832,18 +2832,18 @@
         },
         "test": "ios_web_shell_eg2tests_module",
         "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2851,7 +2851,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_web_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2871,11 +2871,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2883,18 +2883,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2902,7 +2902,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPhone 16 26.1",
+        "name": "ios_web_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2922,11 +2922,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2934,18 +2934,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2953,7 +2953,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2973,11 +2973,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2985,18 +2985,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3004,7 +3004,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPad Air (6th generation) 26.1",
+        "name": "ios_web_view_inttests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3024,11 +3024,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3036,18 +3036,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3055,7 +3055,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPhone 16 26.1",
+        "name": "ios_web_view_inttests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3075,11 +3075,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3087,18 +3087,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3106,7 +3106,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3126,11 +3126,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3138,18 +3138,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3157,7 +3157,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_web_view_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3177,11 +3177,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3189,18 +3189,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3208,7 +3208,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPhone 16 26.1",
+        "name": "ios_web_view_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3228,11 +3228,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3240,18 +3240,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3259,7 +3259,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3279,11 +3279,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3291,18 +3291,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3310,7 +3310,7 @@
         },
         "module_name": "//net:net_unittests",
         "module_scheme": "gtest",
-        "name": "net_unittests iPad Air (6th generation) 26.1",
+        "name": "net_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3330,11 +3330,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3342,18 +3342,18 @@
         },
         "test": "net_unittests",
         "test_id_prefix": "ninja://net:net_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3361,7 +3361,7 @@
         },
         "module_name": "//net:net_unittests",
         "module_scheme": "gtest",
-        "name": "net_unittests iPhone 16 26.1",
+        "name": "net_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3381,11 +3381,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3393,18 +3393,18 @@
         },
         "test": "net_unittests",
         "test_id_prefix": "ninja://net:net_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3412,7 +3412,7 @@
         },
         "module_name": "//services:services_unittests",
         "module_scheme": "gtest",
-        "name": "services_unittests iPad Air (6th generation) 26.1",
+        "name": "services_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3432,11 +3432,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3444,18 +3444,18 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3463,7 +3463,7 @@
         },
         "module_name": "//services:services_unittests",
         "module_scheme": "gtest",
-        "name": "services_unittests iPhone 16 26.1",
+        "name": "services_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3483,11 +3483,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3495,18 +3495,18 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3514,7 +3514,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPad Air (6th generation) 26.1",
+        "name": "skia_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3534,11 +3534,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3546,18 +3546,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3565,7 +3565,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPhone 16 26.1",
+        "name": "skia_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3585,11 +3585,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3597,18 +3597,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3616,7 +3616,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPhone SE (3rd generation) 26.1",
+        "name": "skia_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3636,11 +3636,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3648,18 +3648,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3667,7 +3667,7 @@
         },
         "module_name": "//sql:sql_unittests",
         "module_scheme": "gtest",
-        "name": "sql_unittests iPad Air (6th generation) 26.1",
+        "name": "sql_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3687,11 +3687,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3699,18 +3699,18 @@
         },
         "test": "sql_unittests",
         "test_id_prefix": "ninja://sql:sql_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3718,7 +3718,7 @@
         },
         "module_name": "//sql:sql_unittests",
         "module_scheme": "gtest",
-        "name": "sql_unittests iPhone 16 26.1",
+        "name": "sql_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3738,11 +3738,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3750,18 +3750,18 @@
         },
         "test": "sql_unittests",
         "test_id_prefix": "ninja://sql:sql_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3769,7 +3769,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPad Air (6th generation) 26.1",
+        "name": "ui_base_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3789,11 +3789,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3801,18 +3801,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3820,7 +3820,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPhone 16 26.1",
+        "name": "ui_base_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3840,11 +3840,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3852,18 +3852,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3871,7 +3871,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ui_base_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3891,11 +3891,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3903,18 +3903,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3922,7 +3922,7 @@
         },
         "module_name": "//url:url_unittests",
         "module_scheme": "gtest",
-        "name": "url_unittests iPad Air (6th generation) 26.1",
+        "name": "url_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3942,11 +3942,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3954,18 +3954,18 @@
         },
         "test": "url_unittests",
         "test_id_prefix": "ninja://url:url_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3973,7 +3973,7 @@
         },
         "module_name": "//url:url_unittests",
         "module_scheme": "gtest",
-        "name": "url_unittests iPhone 16 26.1",
+        "name": "url_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3993,11 +3993,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -4005,7 +4005,7 @@
         },
         "test": "url_unittests",
         "test_id_prefix": "ninja://url:url_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       }
     ]
   }
diff --git a/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json b/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json
index 4910981..2da9349 100644
--- a/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json
+++ b/infra/config/generated/builders/try/ios26-sdk-simulator/properties.json
@@ -62,5 +62,5 @@
   },
   "builder_group": "tryserver.chromium.mac",
   "recipe": "chromium_trybot",
-  "xcode_build_version": "17b54"
+  "xcode_build_version": "17c5013i"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json b/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json
index d71fdf09..28580ac6 100644
--- a/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json
+++ b/infra/config/generated/builders/try/ios26-sdk-simulator/targets/chromium.fyi.json
@@ -9,11 +9,11 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -21,7 +21,7 @@
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
         "module_scheme": "gtest",
-        "name": "absl_hardening_tests iPad Air (6th generation) 26.1",
+        "name": "absl_hardening_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -41,11 +41,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -53,18 +53,18 @@
         },
         "test": "absl_hardening_tests",
         "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -72,7 +72,7 @@
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
         "module_scheme": "gtest",
-        "name": "absl_hardening_tests iPhone 16 26.1",
+        "name": "absl_hardening_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -92,11 +92,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -104,18 +104,18 @@
         },
         "test": "absl_hardening_tests",
         "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -123,7 +123,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPad Air (6th generation) 26.1",
+        "name": "base_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -143,11 +143,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -155,18 +155,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -174,7 +174,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPhone 16 26.1",
+        "name": "base_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -194,11 +194,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -206,18 +206,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -225,7 +225,7 @@
         },
         "module_name": "//base:base_unittests",
         "module_scheme": "gtest",
-        "name": "base_unittests iPhone SE (3rd generation) 26.1",
+        "name": "base_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -245,11 +245,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -257,18 +257,18 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -276,7 +276,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_crypto_tests iPad Air (6th generation) 26.1",
+        "name": "boringssl_crypto_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -296,11 +296,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -308,18 +308,18 @@
         },
         "test": "boringssl_crypto_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -327,7 +327,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_crypto_tests iPhone 16 26.1",
+        "name": "boringssl_crypto_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -347,11 +347,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -359,18 +359,18 @@
         },
         "test": "boringssl_crypto_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -378,7 +378,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_ssl_tests iPad Air (6th generation) 26.1",
+        "name": "boringssl_ssl_tests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -398,11 +398,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -410,18 +410,18 @@
         },
         "test": "boringssl_ssl_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -429,7 +429,7 @@
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
         "module_scheme": "gtest",
-        "name": "boringssl_ssl_tests iPhone 16 26.1",
+        "name": "boringssl_ssl_tests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -449,11 +449,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -461,18 +461,18 @@
         },
         "test": "boringssl_ssl_tests",
         "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -480,7 +480,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPad Air (6th generation) 26.1",
+        "name": "components_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -500,11 +500,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -512,18 +512,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -531,7 +531,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPhone 16 26.1",
+        "name": "components_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -551,11 +551,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -563,18 +563,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -582,7 +582,7 @@
         },
         "module_name": "//components:components_unittests",
         "module_scheme": "gtest",
-        "name": "components_unittests iPhone SE (3rd generation) 26.1",
+        "name": "components_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -602,11 +602,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -614,18 +614,18 @@
         },
         "test": "components_unittests",
         "test_id_prefix": "ninja://components:components_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -633,7 +633,7 @@
         },
         "module_name": "//crypto:crypto_unittests",
         "module_scheme": "gtest",
-        "name": "crypto_unittests iPad Air (6th generation) 26.1",
+        "name": "crypto_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -653,11 +653,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -665,18 +665,18 @@
         },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -684,7 +684,7 @@
         },
         "module_name": "//crypto:crypto_unittests",
         "module_scheme": "gtest",
-        "name": "crypto_unittests iPhone 16 26.1",
+        "name": "crypto_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -704,11 +704,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -716,18 +716,18 @@
         },
         "test": "crypto_unittests",
         "test_id_prefix": "ninja://crypto:crypto_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -735,7 +735,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPad Air (6th generation) 26.1",
+        "name": "gfx_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -755,11 +755,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -767,18 +767,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -786,7 +786,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPhone 16 26.1",
+        "name": "gfx_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -806,11 +806,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -818,18 +818,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -837,7 +837,7 @@
         },
         "module_name": "//ui/gfx:gfx_unittests",
         "module_scheme": "gtest",
-        "name": "gfx_unittests iPhone SE (3rd generation) 26.1",
+        "name": "gfx_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -857,11 +857,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -869,18 +869,18 @@
         },
         "test": "gfx_unittests",
         "test_id_prefix": "ninja://ui/gfx:gfx_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -888,7 +888,7 @@
         },
         "module_name": "//google_apis:google_apis_unittests",
         "module_scheme": "gtest",
-        "name": "google_apis_unittests iPad Air (6th generation) 26.1",
+        "name": "google_apis_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -908,11 +908,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -920,18 +920,18 @@
         },
         "test": "google_apis_unittests",
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -939,7 +939,7 @@
         },
         "module_name": "//google_apis:google_apis_unittests",
         "module_scheme": "gtest",
-        "name": "google_apis_unittests iPhone 16 26.1",
+        "name": "google_apis_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -959,11 +959,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -971,18 +971,18 @@
         },
         "test": "google_apis_unittests",
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -990,7 +990,7 @@
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
         "module_scheme": "gtest",
-        "name": "gwp_asan_unittests iPad Air (6th generation) 26.1",
+        "name": "gwp_asan_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1010,11 +1010,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1022,18 +1022,18 @@
         },
         "test": "gwp_asan_unittests",
         "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1041,7 +1041,7 @@
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
         "module_scheme": "gtest",
-        "name": "gwp_asan_unittests iPhone 16 26.1",
+        "name": "gwp_asan_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1061,11 +1061,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1073,19 +1073,19 @@
         },
         "test": "gwp_asan_unittests",
         "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1093,7 +1093,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_bookmarks_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1113,11 +1113,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1126,19 +1126,19 @@
         },
         "test": "ios_chrome_bookmarks_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1146,7 +1146,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_bookmarks_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1166,11 +1166,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1179,7 +1179,7 @@
         },
         "test": "ios_chrome_bookmarks_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1188,12 +1188,12 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1201,7 +1201,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_integration_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1221,11 +1221,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1234,7 +1234,7 @@
         },
         "test": "ios_chrome_integration_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1243,12 +1243,12 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1256,7 +1256,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_integration_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1276,11 +1276,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1289,7 +1289,7 @@
         },
         "test": "ios_chrome_integration_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1298,12 +1298,12 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1311,7 +1311,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_settings_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1331,11 +1331,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1344,7 +1344,7 @@
         },
         "test": "ios_chrome_settings_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1353,12 +1353,12 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1366,7 +1366,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_settings_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1386,11 +1386,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1399,19 +1399,19 @@
         },
         "test": "ios_chrome_settings_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1419,7 +1419,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_signin_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1439,11 +1439,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1452,19 +1452,19 @@
         },
         "test": "ios_chrome_signin_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1472,7 +1472,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_signin_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1492,11 +1492,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1505,19 +1505,19 @@
         },
         "test": "ios_chrome_signin_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1525,7 +1525,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_smoke_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1545,11 +1545,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1557,19 +1557,19 @@
         },
         "test": "ios_chrome_smoke_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1577,7 +1577,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_smoke_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1597,11 +1597,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1609,7 +1609,7 @@
         },
         "test": "ios_chrome_smoke_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
@@ -1618,12 +1618,12 @@
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1631,7 +1631,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_ui_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1651,11 +1651,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1664,7 +1664,7 @@
         },
         "test": "ios_chrome_ui_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
@@ -1673,12 +1673,12 @@
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1686,7 +1686,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_ui_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1706,11 +1706,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1719,18 +1719,18 @@
         },
         "test": "ios_chrome_ui_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1738,7 +1738,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1758,11 +1758,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1770,18 +1770,18 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1789,7 +1789,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPhone 16 26.1",
+        "name": "ios_chrome_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1809,11 +1809,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1821,18 +1821,18 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1840,7 +1840,7 @@
         },
         "module_name": "//ios/chrome/test:ios_chrome_unittests",
         "module_scheme": "gtest",
-        "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_chrome_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1860,11 +1860,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1872,19 +1872,19 @@
         },
         "test": "ios_chrome_unittests",
         "test_id_prefix": "ninja://ios/chrome/test:ios_chrome_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1892,7 +1892,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_chrome_web_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1912,11 +1912,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1925,19 +1925,19 @@
         },
         "test": "ios_chrome_web_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1945,7 +1945,7 @@
         },
         "module_name": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_chrome_web_eg2tests_module iPhone 16 26.1",
+        "name": "ios_chrome_web_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -1965,11 +1965,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -1978,18 +1978,18 @@
         },
         "test": "ios_chrome_web_eg2tests_module",
         "test_id_prefix": "ninja://ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -1997,7 +1997,7 @@
         },
         "module_name": "//ios/components:ios_components_unittests",
         "module_scheme": "gtest",
-        "name": "ios_components_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_components_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2017,11 +2017,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2029,18 +2029,18 @@
         },
         "test": "ios_components_unittests",
         "test_id_prefix": "ninja://ios/components:ios_components_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2048,7 +2048,7 @@
         },
         "module_name": "//ios/components:ios_components_unittests",
         "module_scheme": "gtest",
-        "name": "ios_components_unittests iPhone 16 26.1",
+        "name": "ios_components_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2068,11 +2068,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2080,18 +2080,18 @@
         },
         "test": "ios_components_unittests",
         "test_id_prefix": "ninja://ios/components:ios_components_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2099,7 +2099,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_credential_provider_extension_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2119,11 +2119,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2131,18 +2131,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2150,7 +2150,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPhone 16 26.1",
+        "name": "ios_credential_provider_extension_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2170,11 +2170,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2182,18 +2182,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2201,7 +2201,7 @@
         },
         "module_name": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
         "module_scheme": "gtest",
-        "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_credential_provider_extension_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2221,11 +2221,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2233,18 +2233,18 @@
         },
         "test": "ios_credential_provider_extension_unittests",
         "test_id_prefix": "ninja://ios/chrome/test/extensions:ios_credential_provider_extension_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2252,7 +2252,7 @@
         },
         "module_name": "//ios/net:ios_net_unittests",
         "module_scheme": "gtest",
-        "name": "ios_net_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_net_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2272,11 +2272,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2285,18 +2285,18 @@
         },
         "test": "ios_net_unittests",
         "test_id_prefix": "ninja://ios/net:ios_net_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2304,7 +2304,7 @@
         },
         "module_name": "//ios/net:ios_net_unittests",
         "module_scheme": "gtest",
-        "name": "ios_net_unittests iPhone 16 26.1",
+        "name": "ios_net_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2324,11 +2324,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2337,18 +2337,18 @@
         },
         "test": "ios_net_unittests",
         "test_id_prefix": "ninja://ios/net:ios_net_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2356,7 +2356,7 @@
         },
         "module_name": "//ios/testing:ios_testing_unittests",
         "module_scheme": "gtest",
-        "name": "ios_testing_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_testing_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2376,11 +2376,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2388,18 +2388,18 @@
         },
         "test": "ios_testing_unittests",
         "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2407,7 +2407,7 @@
         },
         "module_name": "//ios/testing:ios_testing_unittests",
         "module_scheme": "gtest",
-        "name": "ios_testing_unittests iPhone 16 26.1",
+        "name": "ios_testing_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2427,11 +2427,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2439,18 +2439,18 @@
         },
         "test": "ios_testing_unittests",
         "test_id_prefix": "ninja://ios/testing:ios_testing_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2458,7 +2458,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPad Air (6th generation) 26.1",
+        "name": "ios_web_inttests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2478,11 +2478,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2490,18 +2490,18 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2509,7 +2509,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPhone 16 26.1",
+        "name": "ios_web_inttests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2529,11 +2529,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2541,18 +2541,18 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2560,7 +2560,7 @@
         },
         "module_name": "//ios/web:ios_web_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_inttests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_inttests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2580,11 +2580,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2592,19 +2592,19 @@
         },
         "test": "ios_web_inttests",
         "test_id_prefix": "ninja://ios/web:ios_web_inttests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2612,7 +2612,7 @@
         },
         "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.1",
+        "name": "ios_web_shell_eg2tests_module iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2632,11 +2632,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2644,19 +2644,19 @@
         },
         "test": "ios_web_shell_eg2tests_module",
         "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--xcodebuild-sim-runner",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2664,7 +2664,7 @@
         },
         "module_name": "//ios/web/shell/test:ios_web_shell_eg2tests_module",
         "module_scheme": "xctest",
-        "name": "ios_web_shell_eg2tests_module iPhone 16 26.1",
+        "name": "ios_web_shell_eg2tests_module iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2684,11 +2684,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2696,18 +2696,18 @@
         },
         "test": "ios_web_shell_eg2tests_module",
         "test_id_prefix": "ninja://ios/web/shell/test:ios_web_shell_eg2tests_module/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2715,7 +2715,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_web_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2735,11 +2735,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2747,18 +2747,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2766,7 +2766,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPhone 16 26.1",
+        "name": "ios_web_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2786,11 +2786,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2798,18 +2798,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2817,7 +2817,7 @@
         },
         "module_name": "//ios/web:ios_web_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2837,11 +2837,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2849,18 +2849,18 @@
         },
         "test": "ios_web_unittests",
         "test_id_prefix": "ninja://ios/web:ios_web_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2868,7 +2868,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPad Air (6th generation) 26.1",
+        "name": "ios_web_view_inttests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2888,11 +2888,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2900,18 +2900,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2919,7 +2919,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPhone 16 26.1",
+        "name": "ios_web_view_inttests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2939,11 +2939,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -2951,18 +2951,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -2970,7 +2970,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_inttests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_view_inttests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -2990,11 +2990,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3002,18 +3002,18 @@
         },
         "test": "ios_web_view_inttests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_inttests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3021,7 +3021,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPad Air (6th generation) 26.1",
+        "name": "ios_web_view_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3041,11 +3041,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3053,18 +3053,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3072,7 +3072,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPhone 16 26.1",
+        "name": "ios_web_view_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3092,11 +3092,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3104,18 +3104,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3123,7 +3123,7 @@
         },
         "module_name": "//ios/web_view/test:ios_web_view_unittests",
         "module_scheme": "gtest",
-        "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ios_web_view_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3143,11 +3143,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3155,18 +3155,18 @@
         },
         "test": "ios_web_view_unittests",
         "test_id_prefix": "ninja://ios/web_view/test:ios_web_view_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3174,7 +3174,7 @@
         },
         "module_name": "//net:net_unittests",
         "module_scheme": "gtest",
-        "name": "net_unittests iPad Air (6th generation) 26.1",
+        "name": "net_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3194,11 +3194,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3206,18 +3206,18 @@
         },
         "test": "net_unittests",
         "test_id_prefix": "ninja://net:net_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3225,7 +3225,7 @@
         },
         "module_name": "//net:net_unittests",
         "module_scheme": "gtest",
-        "name": "net_unittests iPhone 16 26.1",
+        "name": "net_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3245,11 +3245,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3257,18 +3257,18 @@
         },
         "test": "net_unittests",
         "test_id_prefix": "ninja://net:net_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3276,7 +3276,7 @@
         },
         "module_name": "//services:services_unittests",
         "module_scheme": "gtest",
-        "name": "services_unittests iPad Air (6th generation) 26.1",
+        "name": "services_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3296,11 +3296,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3308,18 +3308,18 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3327,7 +3327,7 @@
         },
         "module_name": "//services:services_unittests",
         "module_scheme": "gtest",
-        "name": "services_unittests iPhone 16 26.1",
+        "name": "services_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3347,11 +3347,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3359,18 +3359,18 @@
         },
         "test": "services_unittests",
         "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3378,7 +3378,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPad Air (6th generation) 26.1",
+        "name": "skia_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3398,11 +3398,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3410,18 +3410,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3429,7 +3429,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPhone 16 26.1",
+        "name": "skia_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3449,11 +3449,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3461,18 +3461,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3480,7 +3480,7 @@
         },
         "module_name": "//skia:skia_unittests",
         "module_scheme": "gtest",
-        "name": "skia_unittests iPhone SE (3rd generation) 26.1",
+        "name": "skia_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3500,11 +3500,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3512,18 +3512,18 @@
         },
         "test": "skia_unittests",
         "test_id_prefix": "ninja://skia:skia_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3531,7 +3531,7 @@
         },
         "module_name": "//sql:sql_unittests",
         "module_scheme": "gtest",
-        "name": "sql_unittests iPad Air (6th generation) 26.1",
+        "name": "sql_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3551,11 +3551,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3563,18 +3563,18 @@
         },
         "test": "sql_unittests",
         "test_id_prefix": "ninja://sql:sql_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3582,7 +3582,7 @@
         },
         "module_name": "//sql:sql_unittests",
         "module_scheme": "gtest",
-        "name": "sql_unittests iPhone 16 26.1",
+        "name": "sql_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3602,11 +3602,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3614,18 +3614,18 @@
         },
         "test": "sql_unittests",
         "test_id_prefix": "ninja://sql:sql_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3633,7 +3633,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPad Air (6th generation) 26.1",
+        "name": "ui_base_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3653,11 +3653,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3665,18 +3665,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3684,7 +3684,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPhone 16 26.1",
+        "name": "ui_base_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3704,11 +3704,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3716,18 +3716,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone SE (3rd generation)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3735,7 +3735,7 @@
         },
         "module_name": "//ui/base:ui_base_unittests",
         "module_scheme": "gtest",
-        "name": "ui_base_unittests iPhone SE (3rd generation) 26.1",
+        "name": "ui_base_unittests iPhone SE (3rd generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3755,11 +3755,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3767,18 +3767,18 @@
         },
         "test": "ui_base_unittests",
         "test_id_prefix": "ninja://ui/base:ui_base_unittests/",
-        "variant_id": "iPhone SE (3rd generation) 26.1"
+        "variant_id": "iPhone SE (3rd generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPad Air 11-inch (M2)",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3786,7 +3786,7 @@
         },
         "module_name": "//url:url_unittests",
         "module_scheme": "gtest",
-        "name": "url_unittests iPad Air (6th generation) 26.1",
+        "name": "url_unittests iPad Air (6th generation) 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3806,11 +3806,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3818,18 +3818,18 @@
         },
         "test": "url_unittests",
         "test_id_prefix": "ninja://url:url_unittests/",
-        "variant_id": "iPad Air (6th generation) 26.1"
+        "variant_id": "iPad Air (6th generation) 26.2"
       },
       {
         "args": [
           "--platform",
           "iPhone 16",
           "--version",
-          "26.1",
+          "26.2",
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "17b54",
+          "17c5013i",
           "--xctest"
         ],
         "merge": {
@@ -3837,7 +3837,7 @@
         },
         "module_name": "//url:url_unittests",
         "module_scheme": "gtest",
-        "name": "url_unittests iPhone 16 26.1",
+        "name": "url_unittests iPhone 16 26.2",
         "resultdb": {
           "enable": true,
           "has_native_resultdb_integration": true
@@ -3857,11 +3857,11 @@
           },
           "named_caches": [
             {
-              "name": "runtime_ios_26_1",
-              "path": "Runtime-ios-26.1"
+              "name": "runtime_ios_26_2",
+              "path": "Runtime-ios-26.2"
             },
             {
-              "name": "xcode_ios_17b54",
+              "name": "xcode_ios_17c5013i",
               "path": "Xcode.app"
             }
           ],
@@ -3869,7 +3869,7 @@
         },
         "test": "url_unittests",
         "test_id_prefix": "ninja://url:url_unittests/",
-        "variant_id": "iPhone 16 26.1"
+        "variant_id": "iPhone 16 26.2"
       }
     ]
   }
diff --git a/infra/config/generated/builders/try/linux-dcheck-off-rel/targets/chromium.linux.json b/infra/config/generated/builders/try/linux-dcheck-off-rel/targets/chromium.linux.json
index c945c9ad..c79e923 100644
--- a/infra/config/generated/builders/try/linux-dcheck-off-rel/targets/chromium.linux.json
+++ b/infra/config/generated/builders/try/linux-dcheck-off-rel/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
+          "shards": 3
         },
         "test": "blink_wpt_tests",
         "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/try/linux-full-remote-rel/targets/chromium.linux.json b/infra/config/generated/builders/try/linux-full-remote-rel/targets/chromium.linux.json
index c945c9ad..c79e923 100644
--- a/infra/config/generated/builders/try/linux-full-remote-rel/targets/chromium.linux.json
+++ b/infra/config/generated/builders/try/linux-full-remote-rel/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
+          "shards": 3
         },
         "test": "blink_wpt_tests",
         "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/try/linux-rel-test-selection/targets/chromium.linux.json b/infra/config/generated/builders/try/linux-rel-test-selection/targets/chromium.linux.json
index c945c9ad..c79e923 100644
--- a/infra/config/generated/builders/try/linux-rel-test-selection/targets/chromium.linux.json
+++ b/infra/config/generated/builders/try/linux-rel-test-selection/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
+          "shards": 3
         },
         "test": "blink_wpt_tests",
         "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/try/linux-rel/targets/chromium.linux.json b/infra/config/generated/builders/try/linux-rel/targets/chromium.linux.json
index c945c9ad..c79e923 100644
--- a/infra/config/generated/builders/try/linux-rel/targets/chromium.linux.json
+++ b/infra/config/generated/builders/try/linux-rel/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
+          "shards": 3
         },
         "test": "blink_wpt_tests",
         "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/targets/chromium.memory.json b/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/targets/chromium.memory.json
index d1cc8ba..1826e9ea6 100644
--- a/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/targets/chromium.memory.json
+++ b/infra/config/generated/builders/try/linux_chromium_asan_rel_ng/targets/chromium.memory.json
@@ -913,7 +913,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 92
+          "shards": 101
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
@@ -1508,7 +1508,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 9
+          "shards": 10
         },
         "test": "unit_tests",
         "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git a/infra/config/generated/builders/try/linux_chromium_compile_rel_ng/targets/chromium.linux.json b/infra/config/generated/builders/try/linux_chromium_compile_rel_ng/targets/chromium.linux.json
index 1c5be331..2c48fcbd 100644
--- a/infra/config/generated/builders/try/linux_chromium_compile_rel_ng/targets/chromium.linux.json
+++ b/infra/config/generated/builders/try/linux_chromium_compile_rel_ng/targets/chromium.linux.json
@@ -1720,7 +1720,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
+          "shards": 3
         },
         "test": "blink_wpt_tests",
         "test_id_prefix": "ninja://:blink_wpt_tests/"
diff --git a/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/targets/chromium.memory.json b/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/targets/chromium.memory.json
index 63b95ee..fee76ffb4 100644
--- a/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/targets/chromium.memory.json
+++ b/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng/targets/chromium.memory.json
@@ -213,7 +213,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 7
+          "shards": 8
         },
         "test": "blink_unittests",
         "test_id_prefix": "ninja://third_party/blink/renderer/controller:blink_unittests/"
@@ -1490,7 +1490,7 @@
             "os": "Ubuntu-22.04"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 8
+          "shards": 10
         },
         "test": "unit_tests",
         "test_id_prefix": "ninja://chrome/test:unit_tests/"
diff --git a/infra/config/generated/builders/try/mac15-arm64-rel/targets/chromium.mac.json b/infra/config/generated/builders/try/mac15-arm64-rel/targets/chromium.mac.json
index 41550b4..1bfad73c 100644
--- a/infra/config/generated/builders/try/mac15-arm64-rel/targets/chromium.mac.json
+++ b/infra/config/generated/builders/try/mac15-arm64-rel/targets/chromium.mac.json
@@ -936,7 +936,7 @@
             }
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 7
+          "shards": 8
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/builders/try/win-rel/targets/chromium.win.json b/infra/config/generated/builders/try/win-rel/targets/chromium.win.json
index db636a65..c3159fbc 100644
--- a/infra/config/generated/builders/try/win-rel/targets/chromium.win.json
+++ b/infra/config/generated/builders/try/win-rel/targets/chromium.win.json
@@ -1078,7 +1078,7 @@
             "os": "Windows-10-19045"
           },
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 18
+          "shards": 20
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg
index d3ab863..a754683 100644
--- a/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -53672,8 +53672,8 @@
       priority: 35
       execution_timeout_secs: 10800
       caches {
-        name: "xcode_ios_17b54"
-        path: "xcode_ios_17b54.app"
+        name: "xcode_ios_17c5013i"
+        path: "xcode_ios_17c5013i.app"
       }
       build_numbers: YES
       service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
@@ -55320,8 +55320,8 @@
       priority: 35
       execution_timeout_secs: 36000
       caches {
-        name: "xcode_ios_17b54"
-        path: "xcode_ios_17b54.app"
+        name: "xcode_ios_17c5013i"
+        path: "xcode_ios_17c5013i.app"
       }
       build_numbers: YES
       service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
@@ -55546,8 +55546,8 @@
       priority: 35
       execution_timeout_secs: 36000
       caches {
-        name: "xcode_ios_17b54"
-        path: "xcode_ios_17b54.app"
+        name: "xcode_ios_17c5013i"
+        path: "xcode_ios_17c5013i.app"
       }
       build_numbers: YES
       service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
@@ -109191,8 +109191,8 @@
         seconds: 120
       }
       caches {
-        name: "xcode_ios_17b54"
-        path: "xcode_ios_17b54.app"
+        name: "xcode_ios_17c5013i"
+        path: "xcode_ios_17c5013i.app"
       }
       build_numbers: YES
       service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
@@ -110856,8 +110856,8 @@
         seconds: 120
       }
       caches {
-        name: "xcode_ios_17b54"
-        path: "xcode_ios_17b54.app"
+        name: "xcode_ios_17c5013i"
+        path: "xcode_ios_17c5013i.app"
       }
       build_numbers: YES
       service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
@@ -111090,8 +111090,8 @@
         seconds: 120
       }
       caches {
-        name: "xcode_ios_17b54"
-        path: "xcode_ios_17b54.app"
+        name: "xcode_ios_17c5013i"
+        path: "xcode_ios_17c5013i.app"
       }
       build_numbers: YES
       service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/infra/config/generated/testing/gn_isolate_map.pyl b/infra/config/generated/testing/gn_isolate_map.pyl
index 87f0975..75bf6087 100644
--- a/infra/config/generated/testing/gn_isolate_map.pyl
+++ b/infra/config/generated/testing/gn_isolate_map.pyl
@@ -7,14 +7,17 @@
   "absl_hardening_tests": {
     "label": "//third_party/abseil-cpp:absl_hardening_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "accessibility_unittests": {
     "label": "//ui/accessibility:accessibility_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "android_browsertests": {
     "label": "//chrome/test:android_browsertests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "android_lint": {
@@ -25,6 +28,7 @@
   "android_sync_integration_tests": {
     "label": "//chrome/test:android_sync_integration_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "android_tools": {
@@ -34,120 +38,145 @@
   "android_webview_junit_tests": {
     "label": "//android_webview/test:android_webview_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "android_webview_unittests": {
     "label": "//android_webview/test:android_webview_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "angle_deqp_egl_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_egl_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_gles2_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_gles2_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_gles31_rotate180_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_gles31_rotate180_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_gles31_rotate270_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_gles31_rotate270_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_gles31_rotate90_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_gles31_rotate90_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_gles31_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_gles31_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_gles3_rotate180_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_gles3_rotate180_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_gles3_rotate270_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_gles3_rotate270_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_gles3_rotate90_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_gles3_rotate90_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_gles3_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_gles3_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_khr_gles2_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_khr_gles2_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_khr_gles31_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_khr_gles31_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_deqp_khr_gles3_tests": {
     "label": "//third_party/angle/src/tests:angle_deqp_khr_gles3_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "deqp",
     "skip_usage_check": True,
   },
   "angle_end2end_tests": {
     "label": "//third_party/angle/src/tests:angle_end2end_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "angle_unittests": {
     "label": "//third_party/angle/src/tests:angle_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "angle_white_box_tests": {
     "label": "//third_party/angle/src/tests:angle_white_box_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "app_shell_unittests": {
     "label": "//extensions/shell:app_shell_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "ash_components_unittests": {
     "label": "//chromeos/ash/experiences:ash_components_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "ash_pixeltests": {
     "label": "//ash:ash_pixeltests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ash_unittests": {
     "label": "//ash:ash_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "ash_webui_unittests": {
     "label": "//ash/webui:ash_webui_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "aura_unittests": {
     "label": "//ui/aura:aura_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "base_junit_tests": {
     "label": "//base:base_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "base_nocompile_tests": {
@@ -171,18 +200,22 @@
   "base_unittests": {
     "label": "//base:base_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "blink_common_unittests": {
     "label": "//third_party/blink/common:blink_common_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "blink_fuzzer_unittests": {
     "label": "//third_party/blink/renderer/platform:blink_fuzzer_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "blink_heap_unittests": {
     "label": "//third_party/blink/renderer/platform/heap:blink_heap_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "blink_platform_nocompile_tests": {
     "label": "//third_party/blink/renderer/platform:blink_platform_nocompile_tests",
@@ -192,6 +225,7 @@
   "blink_platform_unittests": {
     "label": "//third_party/blink/renderer/platform:blink_platform_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "blink_probes_nocompile_tests": {
     "label": "//third_party/blink/renderer/core/probe:blink_probes_nocompile_tests",
@@ -201,11 +235,13 @@
   "blink_python_tests": {
     "label": "//:blink_python_tests",
     "type": "generated_script",
+    "module_scheme": "pyunit",
     "skip_usage_check": True,
   },
   "blink_pytype": {
     "label": "//third_party/blink/tools:blink_pytype",
     "type": "script",
+    "module_scheme": "single",
     "script": "//third_party/blink/tools/run_pytype.py",
     "skip_usage_check": True,
   },
@@ -216,10 +252,12 @@
   "blink_unittests": {
     "label": "//third_party/blink/renderer/controller:blink_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "blink_web_tests": {
     "label": "//:blink_web_tests",
     "type": "generated_script",
+    "module_scheme": "webtest",
     "args": [
       "--results-directory",
       "${ISOLATED_OUTDIR}",
@@ -228,6 +266,7 @@
   "blink_wpt_tests": {
     "label": "//:blink_wpt_tests",
     "type": "generated_script",
+    "module_scheme": "webtest",
     "args": [
       "--results-directory",
       "${ISOLATED_OUTDIR}",
@@ -236,32 +275,39 @@
   "boringssl_crypto_tests": {
     "label": "//third_party/boringssl:boringssl_crypto_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "boringssl_ssl_tests": {
     "label": "//third_party/boringssl:boringssl_ssl_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "browser_tests": {
     "label": "//chrome/test:browser_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "build_junit_tests": {
     "label": "//build/android:build_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "build_rust_tests": {
     "label": "//build/rust/tests:build_rust_tests",
     "type": "generated_script",
+    "module_scheme": "flat",
     "skip_usage_check": True,
   },
   "capture_unittests": {
     "label": "//media/capture:capture_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "captured_sites_interactive_tests": {
     "label": "//chrome/test:captured_sites_interactive_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "args": [
       "--disable-extensions",
     ],
@@ -269,21 +315,25 @@
   "cast_android_cma_backend_unittests": {
     "label": "//chromecast/media/cma/backend/android:cast_android_cma_backend_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_audio_backend_unittests": {
     "label": "//chromecast/media/cma/backend:cast_audio_backend_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_base_junit_tests": {
     "label": "//chromecast/base:cast_base_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "cast_base_unittests": {
     "label": "//chromecast/base:cast_base_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_browser_apk": {
@@ -299,21 +349,25 @@
   "cast_cast_core_unittests": {
     "label": "//chromecast/cast_core:cast_cast_core_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_crash_unittests": {
     "label": "//chromecast/crash:cast_crash_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_display_settings_unittests": {
     "label": "//chromecast/ui/display_settings:cast_display_settings_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_graphics_unittests": {
     "label": "//chromecast/graphics:cast_graphics_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_junit_test_lists": {
@@ -324,16 +378,19 @@
   "cast_media_unittests": {
     "label": "//chromecast/media:cast_media_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_runner_browsertests": {
     "label": "//fuchsia_web/runners:cast_runner_browsertests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_runner_integration_tests": {
     "label": "//fuchsia_web/runners:cast_runner_integration_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_runner_pkg": {
@@ -343,6 +400,7 @@
   "cast_runner_unittests": {
     "label": "//fuchsia_web/runners:cast_runner_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_shell": {
@@ -353,16 +411,19 @@
   "cast_shell_browsertests": {
     "label": "//chromecast:cast_shell_browsertests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_shell_junit_tests": {
     "label": "//chromecast/browser/android:cast_shell_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "cast_shell_unittests": {
     "label": "//chromecast:cast_shell_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cast_test_lists": {
@@ -373,10 +434,12 @@
   "cast_unittests": {
     "label": "//media/cast:cast_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "cc_unittests": {
     "label": "//cc:cc_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "check_chrome_static_initializers": {
     "label": "//chrome/android:check_chrome_static_initializers",
@@ -420,6 +483,7 @@
   "chrome_ai_wpt_tests": {
     "label": "//components/optimization_guide/internal/testing:chrome_ai_wpt_tests",
     "type": "generated_script",
+    "module_scheme": "webtest",
     "args": [
       "--results-directory",
       "${ISOLATED_OUTDIR}",
@@ -428,6 +492,7 @@
   "chrome_all_tast_tests": {
     "label": "//chromeos:chrome_all_tast_tests",
     "type": "generated_script",
+    "module_scheme": "tast",
     "args": [
       "--logs-dir=${ISOLATED_OUTDIR}",
     ],
@@ -435,10 +500,12 @@
   "chrome_app_unittests": {
     "label": "//chrome/test:chrome_app_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "chrome_criticalstaging_tast_tests": {
     "label": "//chromeos:chrome_criticalstaging_tast_tests",
     "type": "generated_script",
+    "module_scheme": "tast",
     "args": [
       "--logs-dir=${ISOLATED_OUTDIR}",
     ],
@@ -446,6 +513,7 @@
   "chrome_disabled_tast_tests": {
     "label": "//chromeos:chrome_disabled_tast_tests",
     "type": "generated_script",
+    "module_scheme": "tast",
     "args": [
       "--logs-dir=${ISOLATED_OUTDIR}",
     ],
@@ -453,11 +521,13 @@
   "chrome_elf_unittests": {
     "label": "//chrome/chrome_elf:chrome_elf_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "chrome_ios_wpt": {
     "label": "//ios/chrome/test/wpt:chrome_ios_wpt",
     "type": "generated_script",
+    "module_scheme": "webtest",
     "skip_usage_check": True,
     "args": [
       "--results-directory",
@@ -467,16 +537,19 @@
   "chrome_java_test_pagecontroller_junit_tests": {
     "label": "//chrome/test/android:chrome_java_test_pagecontroller_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "chrome_junit_tests": {
     "label": "//chrome/android:chrome_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "chrome_ml_unittests": {
     "label": "//components/optimization_guide/internal:chrome_ml_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "chrome_nocompile_tests": {
     "label": "//chrome/android:chrome_nocompile_tests",
@@ -494,6 +567,7 @@
   "chrome_private_code_test": {
     "label": "//chrome:chrome_private_code_test",
     "type": "generated_script",
+    "module_scheme": "single",
   },
   "chrome_public_apk": {
     "label": "//chrome/android:chrome_public_apk",
@@ -502,36 +576,43 @@
   "chrome_public_apk_baseline_profile_generator": {
     "label": "//chrome/test/android:chrome_public_apk_baseline_profile_generator",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "chrome_public_smoke_test": {
     "label": "//chrome/android:chrome_public_smoke_test",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "chrome_public_test_apk": {
     "label": "//chrome/android:chrome_public_test_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "chrome_public_test_ar_apk": {
     "label": "//chrome/android:chrome_public_test_ar_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "chrome_public_test_vr_apk": {
     "label": "//chrome/android:chrome_public_test_vr_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "chrome_public_unit_test_apk": {
     "label": "//chrome/android:chrome_public_unit_test_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "chrome_public_wpt": {
     "label": "//chrome/android:chrome_public_wpt",
     "type": "generated_script",
+    "module_scheme": "webtest",
     "skip_usage_check": True,
     "args": [
       "--results-directory",
@@ -545,10 +626,12 @@
   "chrome_sizes": {
     "label": "//chrome/test:chrome_sizes",
     "type": "generated_script",
+    "module_scheme": "single",
   },
   "chrome_wpt_tests": {
     "label": "//:chrome_wpt_tests",
     "type": "generated_script",
+    "module_scheme": "webtest",
     "args": [
       "--results-directory",
       "${ISOLATED_OUTDIR}",
@@ -565,6 +648,7 @@
   "chromedriver_py_tests": {
     "label": "//chrome/test/chromedriver:chromedriver_py_tests",
     "type": "script",
+    "module_scheme": "pyunit",
     "script": "//testing/xvfb.py",
     "skip_usage_check": True,
     "args": [
@@ -578,6 +662,7 @@
   "chromedriver_py_tests_headless_shell": {
     "label": "//chrome/test/chromedriver:chromedriver_py_tests_headless_shell",
     "type": "script",
+    "module_scheme": "pyunit",
     "script": "//testing/scripts/run_chromedriver_tests.py",
     "skip_usage_check": True,
     "args": [
@@ -590,24 +675,29 @@
   "chromedriver_replay_unittests": {
     "label": "//chrome/test/chromedriver:chromedriver_replay_unittests",
     "type": "script",
+    "module_scheme": "single",
     "script": "//chrome/test/chromedriver/log_replay/client_replay_unittest.py",
     "skip_usage_check": True,
   },
   "chromedriver_unittests": {
     "label": "//chrome/test/chromedriver:chromedriver_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "chromeos_components_unittests": {
     "label": "//chromeos/components:chromeos_components_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "chromeos_integration_tests": {
     "label": "//chrome/test:chromeos_integration_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "chromeos_unittests": {
     "label": "//chromeos:chromeos_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "chromium_builder_asan": {
     "label": "//:chromium_builder_asan",
@@ -624,6 +714,7 @@
   "command_buffer_perftests": {
     "label": "//gpu:command_buffer_perftests",
     "type": "script",
+    "module_scheme": "single",
     "script": "//testing/scripts/run_performance_tests.py",
     "skip_usage_check": True,
     "args": [
@@ -636,6 +727,7 @@
   "component_storage_test": {
     "label": "//build/fuchsia/test:component_storage_test",
     "type": "script",
+    "module_scheme": "single",
     "script": "//build/fuchsia/test/component_storage_test.py",
     "skip_usage_check": True,
   },
@@ -678,10 +770,12 @@
   "components_browsertests": {
     "label": "//components:components_browsertests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "components_junit_tests": {
     "label": "//components:components_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "components_perftests": {
@@ -698,18 +792,22 @@
   "components_unittests": {
     "label": "//components:components_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "compositor_unittests": {
     "label": "//ui/compositor:compositor_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "content_browsertests": {
     "label": "//content/test:content_browsertests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "content_junit_tests": {
     "label": "//content/public/android:content_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "content_nocompile_tests": {
@@ -725,16 +823,19 @@
   "content_shell_crash_test": {
     "label": "//content/shell:content_shell_crash_test",
     "type": "script",
+    "module_scheme": "single",
     "script": "//testing/scripts/content_shell_crash_test.py",
   },
   "content_shell_test_apk": {
     "label": "//content/shell/android:content_shell_test_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "content_unittests": {
     "label": "//content/test:content_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "core_runtime_simple": {
     "label": "//chromecast/cast_core:core_runtime_simple",
@@ -749,6 +850,7 @@
   "crashpad_tests": {
     "label": "//third_party/crashpad/crashpad:crashpad_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "cronet_gn2bp_aosp_feedback_loop": {
     "label": "//components/cronet/android:cronet_gn2bp_aosp_feedback_loop",
@@ -768,56 +870,67 @@
   "cronet_sample_test_apk": {
     "label": "//components/cronet/android:cronet_sample_test_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "cronet_sizes": {
     "label": "//components/cronet/android:cronet_sizes",
     "type": "generated_script",
+    "module_scheme": "single",
     "skip_usage_check": True,
   },
   "cronet_smoketests_apk": {
     "label": "//components/cronet/android:cronet_smoketests_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "cronet_smoketests_missing_native_library_instrumentation_apk": {
     "label": "//components/cronet/android:cronet_smoketests_missing_native_library_instrumentation_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "cronet_smoketests_platform_only_instrumentation_apk": {
     "label": "//components/cronet/android:cronet_smoketests_platform_only_instrumentation_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "cronet_test_instrumentation_apk": {
     "label": "//components/cronet/android:cronet_test_instrumentation_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "cronet_tests": {
     "label": "//components/cronet:cronet_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cronet_tests_android": {
     "label": "//components/cronet/android:cronet_tests_android",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cronet_unittests": {
     "label": "//components/cronet:cronet_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "cronet_unittests_android": {
     "label": "//components/cronet/android:cronet_unittests_android",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "crossbench_smoketests": {
     "label": "//chrome/test:crossbench_smoketests",
     "type": "generated_script",
+    "module_scheme": "single",
     "skip_usage_check": True,
     "args": [
       "../../third_party/crossbench/cb.py",
@@ -833,6 +946,7 @@
   "crypto_unittests": {
     "label": "//crypto:crypto_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "ct_telemetry_perf_tests_without_chrome": {
     "label": "//chrome/test:ct_telemetry_perf_tests_without_chrome",
@@ -845,11 +959,13 @@
   "dawn_end2end_tests": {
     "label": "//third_party/dawn/src/dawn/tests:dawn_end2end_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "dawn_perf_tests": {
     "label": "//third_party/dawn/src/dawn/tests:dawn_perf_tests",
     "type": "script",
+    "module_scheme": "single",
     "script": "//testing/scripts/run_performance_tests.py",
     "skip_usage_check": True,
     "args": [
@@ -863,29 +979,35 @@
   "dbus_unittests": {
     "label": "//dbus:dbus_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "delayloads_unittests": {
     "label": "//chrome/test:delayloads_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "device_junit_tests": {
     "label": "//device:device_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "device_realtarget_browsertests": {
     "label": "//chrome/test:device_realtarget_browsertests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "device_unittests": {
     "label": "//device:device_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "disk_usage_tast_test": {
     "label": "//chromeos:disk_usage_tast_test",
     "type": "generated_script",
+    "module_scheme": "tast",
     "skip_usage_check": True,
     "args": [
       "--logs-dir=${ISOLATED_OUTDIR}",
@@ -894,15 +1016,18 @@
   "display_unittests": {
     "label": "//ui/display:display_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "elevated_tracing_service_unittests": {
     "label": "//chrome/windows_services/elevated_tracing_service:elevated_tracing_service_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "elevation_service_unittests": {
     "label": "//chrome/elevation_service:elevation_service_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "empty_main": {
@@ -913,6 +1038,7 @@
   "enterprise_companion_integration_tests": {
     "label": "//chrome/enterprise_companion:enterprise_companion_integration_tests",
     "type": "script",
+    "module_scheme": "gtest",
     "script": "//testing/scripts/run_telemetry_as_googletest.py",
     "skip_usage_check": True,
     "args": [
@@ -925,6 +1051,7 @@
   "enterprise_companion_tests": {
     "label": "//chrome/enterprise_companion:enterprise_companion_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
     "args": [
       "--gtest_shuffle",
@@ -933,77 +1060,94 @@
   "env_chromium_unittests": {
     "label": "//third_party/leveldatabase:env_chromium_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "events_unittests": {
     "label": "//ui/events:events_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "exo_unittests": {
     "label": "//components/exo:exo_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "extensions_browsertests": {
     "label": "//extensions:extensions_browsertests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "extensions_unittests": {
     "label": "//extensions:extensions_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "fake_libva_driver_unittest": {
     "label": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "filesystem_service_unittests": {
     "label": "//components/services/filesystem:filesystem_service_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "flatbuffers_unittests": {
     "label": "//third_party/flatbuffers:flatbuffers_unittests",
     "type": "script",
+    "module_scheme": "single",
     "script": "//testing/scripts/run_flatbuffers_unittests.py",
     "skip_usage_check": True,
   },
   "fuchsia_pytype": {
     "label": "//testing:fuchsia_pytype",
     "type": "script",
+    "module_scheme": "single",
     "script": "//build/fuchsia/test/run_pytype.py",
     "skip_usage_check": True,
   },
   "fuchsia_sizes": {
     "label": "//tools/fuchsia/size_tests:fuchsia_sizes",
     "type": "generated_script",
+    "module_scheme": "flat",
     "skip_usage_check": True,
   },
   "fuzzing_unittests": {
     "label": "//testing/libfuzzer/tests:fuzzing_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "gcm_unit_tests": {
     "label": "//google_apis/gcm:gcm_unit_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "gcp_unittests": {
     "label": "//chrome/credential_provider/test:gcp_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "gfx_unittests": {
     "label": "//ui/gfx:gfx_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "gin_unittests": {
     "label": "//gin:gin_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "gl_tests": {
     "label": "//gpu:gl_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "gl_unittests": {
     "label": "//ui/gl:gl_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "gl_unittests_ozone": {
@@ -1011,6 +1155,7 @@
     "label_type": "group",
     "type": "windowed_test_launcher",
     "executable": "gl_unittests",
+    "module_scheme": "gtest",
   },
   "gn_all": {
     "label": "//:gn_all",
@@ -1020,12 +1165,14 @@
   "gold_common_pytype": {
     "label": "//build:gold_common_pytype",
     "type": "script",
+    "module_scheme": "single",
     "script": "//build/skia_gold_common/run_pytype.py",
     "skip_usage_check": True,
   },
   "google_apis_unittests": {
     "label": "//google_apis:google_apis_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "gpu_perftests": {
     "label": "//gpu:gpu_perftests",
@@ -1042,16 +1189,19 @@
   "gpu_pytype": {
     "label": "//content/test:gpu_pytype",
     "type": "script",
+    "module_scheme": "single",
     "script": "//content/test/gpu/run_pytype.py",
     "skip_usage_check": True,
   },
   "gpu_unittests": {
     "label": "//gpu:gpu_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "grit_python_unittests": {
     "label": "//tools/grit:grit_python_unittests",
     "type": "script",
+    "module_scheme": "pyunit",
     "script": "//testing/scripts/run_isolated_script_test.py",
     "skip_usage_check": True,
     "args": [
@@ -1061,14 +1211,17 @@
   "gwp_asan_unittests": {
     "label": "//components/gwp_asan:gwp_asan_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "headless_browsertests": {
     "label": "//headless:headless_browsertests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "headless_shell_wpt": {
     "label": "//:headless_shell_wpt",
     "type": "generated_script",
+    "module_scheme": "webtest",
     "args": [
       "--results-directory",
       "${ISOLATED_OUTDIR}",
@@ -1077,10 +1230,12 @@
   "headless_unittests": {
     "label": "//headless:headless_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "highway_tests": {
     "label": "//third_party/highway:highway_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "image_processor_perf_test": {
     "label": "//media/gpu/chromeos:image_processor_perf_test",
@@ -1090,16 +1245,19 @@
   "install_static_unittests": {
     "label": "//chrome/install_static:install_static_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "installer_util_unittests": {
     "label": "//chrome/installer/util:installer_util_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "interactive_ui_tests": {
     "label": "//chrome/test:interactive_ui_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "args": [
       "--snapshot-output-dir=${ISOLATED_OUTDIR}",
     ],
@@ -1117,6 +1275,7 @@
   "ios_chrome_bookmarks_eg2tests_module": {
     "label": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module",
     "type": "generated_script",
+    "module_scheme": "xctest",
     "skip_usage_check": True,
   },
   "ios_chrome_clusterfuzz_asan_build": {
@@ -1127,126 +1286,152 @@
   "ios_chrome_integration_eg2tests_module": {
     "label": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module",
     "type": "generated_script",
+    "module_scheme": "xctest",
     "skip_usage_check": True,
   },
   "ios_chrome_settings_eg2tests_module": {
     "label": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module",
     "type": "generated_script",
+    "module_scheme": "xctest",
     "skip_usage_check": True,
   },
   "ios_chrome_signin_eg2tests_module": {
     "label": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module",
     "type": "generated_script",
+    "module_scheme": "xctest",
     "skip_usage_check": True,
   },
   "ios_chrome_smoke_eg2tests_module": {
     "label": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module",
     "type": "generated_script",
+    "module_scheme": "xctest",
     "skip_usage_check": True,
   },
   "ios_chrome_ui_eg2tests_module": {
     "label": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module",
     "type": "generated_script",
+    "module_scheme": "xctest",
     "skip_usage_check": True,
   },
   "ios_chrome_unittests": {
     "label": "//ios/chrome/test:ios_chrome_unittests",
     "type": "generated_script",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ios_chrome_web_eg2tests_module": {
     "label": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module",
     "type": "generated_script",
+    "module_scheme": "xctest",
     "skip_usage_check": True,
   },
   "ios_components_unittests": {
     "label": "//ios/components:ios_components_unittests",
     "type": "generated_script",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ios_crash_xcuitests_module": {
     "label": "//third_party/crashpad/crashpad/test/ios:ios_crash_xcuitests_module",
     "type": "generated_script",
+    "module_scheme": "xctest",
     "skip_usage_check": True,
   },
   "ios_credential_provider_extension_unittests": {
     "label": "//ios/chrome/test/extensions:ios_credential_provider_extension_unittests",
     "type": "generated_script",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ios_net_unittests": {
     "label": "//ios/net:ios_net_unittests",
     "type": "generated_script",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ios_testing_unittests": {
     "label": "//ios/testing:ios_testing_unittests",
     "type": "generated_script",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ios_web_inttests": {
     "label": "//ios/web:ios_web_inttests",
     "type": "generated_script",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ios_web_shell_eg2tests_module": {
     "label": "//ios/web/shell/test:ios_web_shell_eg2tests_module",
     "type": "generated_script",
+    "module_scheme": "xctest",
     "skip_usage_check": True,
   },
   "ios_web_unittests": {
     "label": "//ios/web:ios_web_unittests",
     "type": "generated_script",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ios_web_view_inttests": {
     "label": "//ios/web_view/test:ios_web_view_inttests",
     "type": "generated_script",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ios_web_view_unittests": {
     "label": "//ios/web_view/test:ios_web_view_unittests",
     "type": "generated_script",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ipc_tests": {
     "label": "//ipc:ipc_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "jni_zero_sample_apk_test": {
     "label": "//third_party/jni_zero/sample:jni_zero_sample_apk_test",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "junit_unit_tests": {
     "label": "//testing/android/junit:junit_unit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "keyboard_accessory_junit_tests": {
     "label": "//chrome/android/features/keyboard_accessory:keyboard_accessory_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "keyboard_unittests": {
     "label": "//ash/keyboard/ui:keyboard_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "latency_unittests": {
     "label": "//ui/latency:latency_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "leveldb_unittests": {
     "label": "//third_party/leveldatabase:leveldb_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "libjingle_xmpp_unittests": {
     "label": "//third_party/libjingle_xmpp:libjingle_xmpp_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "liburlpattern_unittests": {
     "label": "//third_party/liburlpattern:liburlpattern_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "linux_symbols": {
     "label": "//chrome:linux_symbols",
@@ -1266,11 +1451,13 @@
   "mac_signing_tests": {
     "label": "//chrome/installer/mac:mac_signing_tests",
     "type": "generated_script",
+    "module_scheme": "pyunit",
     "skip_usage_check": True,
   },
   "media_base_junit_tests": {
     "label": "//media/base/android:media_base_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "media_perftests": {
@@ -1298,14 +1485,17 @@
   "media_unittests": {
     "label": "//media:media_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "message_center_unittests": {
     "label": "//ui/message_center:message_center_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "midi_unittests": {
     "label": "//media/midi:midi_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "mini_installer": {
     "label": "//chrome/installer/mini_installer:mini_installer",
@@ -1314,6 +1504,7 @@
   "mini_installer_tests": {
     "label": "//chrome/test/mini_installer:mini_installer_tests",
     "type": "script",
+    "module_scheme": "flat",
     "script": "//testing/scripts/run_isolated_script_test.py",
     "args": [
       "../../chrome/test/mini_installer/run_mini_installer_tests.py",
@@ -1323,6 +1514,7 @@
   "minidump_uploader_test": {
     "label": "//components/minidump_uploader:minidump_uploader_test",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "model_validation_tests": {
@@ -1336,11 +1528,13 @@
   "module_installer_junit_tests": {
     "label": "//components/module_installer/android:module_installer_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "mojo_python_unittests": {
     "label": "//mojo/public/tools:mojo_python_unittests",
     "type": "script",
+    "module_scheme": "pyunit",
     "script": "//testing/scripts/run_isolated_script_test.py",
     "skip_usage_check": True,
     "args": [
@@ -1350,11 +1544,13 @@
   "mojo_test_apk": {
     "label": "//mojo/public/java/system:mojo_test_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "mojo_unittests": {
     "label": "//mojo:mojo_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "nacl_helper": {
     "label": "//components/nacl/loader:nacl_helper",
@@ -1369,10 +1565,12 @@
   "native_theme_unittests": {
     "label": "//ui/native_theme:native_theme_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "net_junit_tests": {
     "label": "//net/android:net_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "net_perftests": {
@@ -1388,10 +1586,12 @@
   "net_unittests": {
     "label": "//net:net_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "notification_helper_unittests": {
     "label": "//chrome/notification_helper:notification_helper_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ondevice_model_benchmark": {
@@ -1413,11 +1613,13 @@
   "one_time_tokens_junit_tests": {
     "label": "//components/one_time_tokens/android/backend/sms:one_time_tokens_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "openscreen_unittests": {
     "label": "//chrome/browser/media/router:openscreen_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "opt_target_coverage_test": {
@@ -1427,31 +1629,38 @@
   "optimization_guide_gpu_unittests": {
     "label": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "optimization_guide_unittests": {
     "label": "//components/optimization_guide/internal:optimization_guide_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "ozone_gl_unittests": {
     "label": "//ui/ozone/gl:ozone_gl_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "ozone_unittests": {
     "label": "//ui/ozone:ozone_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "ozone_x11_unittests": {
     "label": "//ui/ozone:ozone_x11_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "paint_preview_junit_tests": {
     "label": "//components/paint_preview/player/android:paint_preview_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "password_manager_junit_tests": {
     "label": "//chrome/browser/password_manager/android:password_manager_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "pdf_fuzzers": {
@@ -1462,6 +1671,7 @@
   "pdf_unittests": {
     "label": "//pdf:pdf_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "pdfium_test": {
     "label": "//third_party/pdfium/testing:pdfium_test",
@@ -1470,6 +1680,7 @@
   "perfetto_unittests": {
     "label": "//third_party/perfetto:perfetto_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "performance_browser_tests": {
     "label": "//chrome/test:performance_browser_tests",
@@ -1504,6 +1715,7 @@
   "performance_web_engine_test_suite": {
     "label": "//content/test:performance_web_engine_test_suite",
     "type": "script",
+    "module_scheme": "single",
     "script": "//testing/scripts/run_performance_tests.py",
     "args": [
       "../../content/test/gpu/run_telemetry_benchmark_fuchsia.py",
@@ -1528,6 +1740,7 @@
   "polymer_tools_python_unittests": {
     "label": "//tools/polymer:polymer_tools_python_unittests",
     "type": "script",
+    "module_scheme": "pyunit",
     "script": "//testing/scripts/run_isolated_script_test.py",
     "args": [
       "../../tools/polymer/run_polymer_tools_tests.py",
@@ -1540,6 +1753,7 @@
   "power_sampler_unittests": {
     "label": "//tools/mac/power:power_sampler_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "previous_version_mini_installer": {
@@ -1549,19 +1763,23 @@
   "printing_unittests": {
     "label": "//printing:printing_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "private_code_failure_test": {
     "label": "//build/private_code_test:private_code_failure_test",
     "type": "generated_script",
+    "module_scheme": "single",
     "skip_usage_check": True,
   },
   "profile_provider_unittest": {
     "label": "//chrome/browser/metrics/perf:profile_provider_unittest",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "pthreadpool_unittests": {
     "label": "//third_party/pthreadpool:pthreadpool_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "push_apps_to_background_apk": {
     "label": "//tools/android/push_apps_to_background:push_apps_to_background_apk",
@@ -1574,10 +1792,12 @@
   "remoting_unittests": {
     "label": "//remoting:remoting_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "resource_sizes_cronet_sample_apk": {
     "label": "//components/cronet/android:resource_sizes_cronet_sample_apk",
     "type": "generated_script",
+    "module_scheme": "single",
     "skip_usage_check": True,
   },
   "rust_build_tests": {
@@ -1588,48 +1808,58 @@
   "rust_gtest_interop_unittests": {
     "label": "//testing/rust_gtest_interop:rust_gtest_interop_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "sandbox_linux_unittests": {
     "label": "//sandbox/linux:sandbox_linux_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "sandbox_unittests": {
     "label": "//sandbox:sandbox_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "sbox_integration_tests": {
     "label": "//sandbox/win:sbox_integration_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "sbox_unittests": {
     "label": "//sandbox/win:sbox_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "sbox_validation_tests": {
     "label": "//sandbox/win:sbox_validation_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "services_junit_tests": {
     "label": "//services:services_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "services_unittests": {
     "label": "//services:services_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "setup_unittests": {
     "label": "//chrome/installer/setup:setup_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "shell_dialogs_unittests": {
     "label": "//ui/shell_dialogs:shell_dialogs_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "args": [
       "--test-launcher-jobs=1",
     ],
@@ -1637,22 +1867,27 @@
   "shell_encryption_unittests": {
     "label": "//third_party/shell-encryption:shell_encryption_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "skia_unittests": {
     "label": "//skia:skia_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "snapshot_unittests": {
     "label": "//ui/snapshot:snapshot_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "sql_unittests": {
     "label": "//sql:sql_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "storage_unittests": {
     "label": "//storage:storage_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "symupload": {
     "label": "//third_party/breakpad:symupload",
@@ -1661,6 +1896,7 @@
   "sync_integration_tests": {
     "label": "//chrome/test:sync_integration_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "sync_performance_tests": {
     "label": "//chrome/test:sync_performance_tests",
@@ -1686,11 +1922,13 @@
   "system_webview_shell_layout_test_apk": {
     "label": "//android_webview/tools/system_webview_shell:system_webview_shell_layout_test_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "system_webview_wpt": {
     "label": "//android_webview/test:system_webview_wpt",
     "type": "generated_script",
+    "module_scheme": "webtest",
     "skip_usage_check": True,
     "args": [
       "--results-directory",
@@ -1732,6 +1970,7 @@
   "telemetry_gpu_unittests": {
     "label": "//chrome/test:telemetry_gpu_unittests",
     "type": "script",
+    "module_scheme": "flat",
     "script": "//testing/scripts/run_telemetry_as_googletest.py",
     "args": [
       "../../content/test/gpu/run_unittests.py",
@@ -1741,40 +1980,48 @@
   "telemetry_perf_unittests": {
     "label": "//chrome/test:telemetry_perf_unittests",
     "type": "generated_script",
+    "module_scheme": "pyunit",
   },
   "telemetry_perf_unittests_android_chrome": {
     "label": "//chrome/test:telemetry_perf_unittests_android_chrome",
     "type": "generated_script",
+    "module_scheme": "pyunit",
     "skip_usage_check": True,
   },
   "telemetry_unittests": {
     "label": "//chrome/test:telemetry_unittests",
     "type": "generated_script",
+    "module_scheme": "pyunit",
   },
   "test_cpp_including_rust_unittests": {
     "label": "//build/rust/tests/test_cpp_including_rust:test_cpp_including_rust_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "test_env_py_unittests": {
     "label": "//testing:test_env_py_unittests",
     "type": "generated_script",
+    "module_scheme": "single",
     "skip_usage_check": True,
   },
   "test_serde_json_lenient": {
     "label": "//build/rust/tests/test_serde_json_lenient:test_serde_json_lenient",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "testing_pytype": {
     "label": "//testing:testing_pytype",
     "type": "script",
+    "module_scheme": "single",
     "script": "//testing/run_pytype.py",
     "skip_usage_check": True,
   },
   "touch_to_fill_junit_tests": {
     "label": "//chrome/browser/touch_to_fill/password_manager/android:touch_to_fill_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "trace_processor_shell": {
@@ -1806,11 +2053,13 @@
   "trichrome_chrome_bundle_smoke_test": {
     "label": "//chrome/android:trichrome_chrome_bundle_smoke_test",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "trichrome_webview_wpt_64": {
     "label": "//android_webview/test:trichrome_webview_wpt_64",
     "type": "generated_script",
+    "module_scheme": "webtest",
     "skip_usage_check": True,
     "args": [
       "--results-directory",
@@ -1820,36 +2069,44 @@
   "ui_android_unittests": {
     "label": "//ui/android:ui_android_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "ui_base_unittests": {
     "label": "//ui/base:ui_base_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "ui_chromeos_unittests": {
     "label": "//ui/chromeos:ui_chromeos_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "ui_junit_tests": {
     "label": "//ui:ui_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "ui_touch_selection_unittests": {
     "label": "//ui/touch_selection:ui_touch_selection_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "ui_unittests": {
     "label": "//ui/tests:ui_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "unit_tests": {
     "label": "//chrome/test:unit_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "updater_tests": {
     "label": "//chrome/updater:updater_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
     "args": [
       "--gtest_shuffle",
@@ -1861,6 +2118,7 @@
   "updater_tests_system": {
     "label": "//chrome/updater:updater_tests_system",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
     "args": [
       "--gtest_shuffle",
@@ -1873,6 +2131,7 @@
   "updater_tests_win_uac": {
     "label": "//chrome/updater:updater_tests_win_uac",
     "type": "script",
+    "module_scheme": "gtest",
     "script": "//testing/scripts/run_telemetry_as_googletest.py",
     "skip_usage_check": True,
     "args": [
@@ -1894,10 +2153,12 @@
   "url_unittests": {
     "label": "//url:url_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "usage_time_limit_unittests": {
     "label": "//chrome/browser/ash/child_accounts/time_limit_consistency_test:usage_time_limit_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "v4l2_stateless_decoder": {
     "label": "//media/gpu/v4l2:v4l2_stateless_decoder",
@@ -1912,14 +2173,17 @@
   "vaapi_unittest": {
     "label": "//media/gpu/vaapi:vaapi_unittest",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "variations_desktop_smoke_tests": {
     "label": "//chrome/test/variations:variations_desktop_smoke_tests",
     "type": "generated_script",
+    "module_scheme": "flat",
   },
   "variations_smoke_tests": {
     "label": "//chrome/test:variations_smoke_tests",
     "type": "generated_script",
+    "module_scheme": "single",
   },
   "video_decode_accelerator_perf_tests": {
     "label": "//media/gpu/test:video_decode_accelerator_perf_tests",
@@ -1929,6 +2193,7 @@
   "video_decode_accelerator_tests": {
     "label": "//media/gpu/test:video_decode_accelerator_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "video_encode_accelerator_perf_tests": {
     "label": "//media/gpu/test:video_encode_accelerator_perf_tests",
@@ -1938,16 +2203,19 @@
   "video_encode_accelerator_tests": {
     "label": "//media/gpu/test:video_encode_accelerator_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "views_examples_unittests": {
     "label": "//ui/views/examples:views_examples_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "views_perftests": {
     "label": "//ui/views:views_perftests",
     "type": "script",
+    "module_scheme": "single",
     "script": "//testing/scripts/run_performance_tests.py",
     "skip_usage_check": True,
     "args": [
@@ -1959,14 +2227,17 @@
   "views_unittests": {
     "label": "//ui/views:views_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "viz_unittests": {
     "label": "//components/viz:viz_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "vr_android_unittests": {
     "label": "//chrome/browser/android/vr:vr_android_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "vr_common_perftests": {
@@ -1983,11 +2254,13 @@
   "vr_common_unittests": {
     "label": "//chrome/browser/vr:vr_common_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "vr_perf_tests": {
     "label": "//tools/perf/contrib/vr_benchmarks:vr_perf_tests",
     "type": "script",
+    "module_scheme": "flat",
     "script": "//testing/scripts/run_performance_tests.py",
     "skip_usage_check": True,
     "args": [
@@ -2005,24 +2278,29 @@
   "vulkan_tests": {
     "label": "//gpu/vulkan:vulkan_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "wayland_client_perftests": {
     "label": "//components/exo/wayland:wayland_client_perftests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "wayland_client_tests": {
     "label": "//components/exo/wayland:wayland_client_tests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "web_engine_browsertests": {
     "label": "//fuchsia_web/webengine:web_engine_browsertests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "web_engine_integration_tests": {
     "label": "//fuchsia_web/webengine:web_engine_integration_tests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "web_engine_shell_pkg": {
@@ -2032,26 +2310,31 @@
   "web_engine_unittests": {
     "label": "//fuchsia_web/webengine:web_engine_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
   "webapk_client_junit_tests": {
     "label": "//chrome/android/webapk/libs/client:webapk_client_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "webapk_shell_apk_h2o_junit_tests": {
     "label": "//chrome/android/webapk/shell_apk:webapk_shell_apk_h2o_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "webapk_shell_apk_junit_tests": {
     "label": "//chrome/android/webapk/shell_apk:webapk_shell_apk_junit_tests",
     "type": "generated_script",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "webgpu_blink_web_tests": {
     "label": "//:webgpu_blink_web_tests",
     "type": "generated_script",
+    "module_scheme": "webtest",
     "skip_usage_check": True,
     "args": [
       "--results-directory",
@@ -2061,11 +2344,13 @@
   "webui_resources_tools_python_unittests": {
     "label": "//ui/webui/resources/tools:webui_resources_tools_python_unittests",
     "type": "generated_script",
+    "module_scheme": "pyunit",
     "skip_usage_check": True,
   },
   "webview_64_cts_tests": {
     "label": "//android_webview/test:webview_64_cts_tests",
     "type": "script",
+    "module_scheme": "junit",
     "script": "//android_webview/tools/run_cts.py",
     "skip_usage_check": True,
     "args": [
@@ -2083,6 +2368,7 @@
   "webview_cts_tests": {
     "label": "//android_webview/test:webview_cts_tests",
     "type": "script",
+    "module_scheme": "junit",
     "script": "//android_webview/tools/run_cts.py",
     "skip_usage_check": True,
     "args": [
@@ -2100,11 +2386,13 @@
   "webview_instrumentation_test_apk": {
     "label": "//android_webview/test:webview_instrumentation_test_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "webview_trichrome_64_32_cts_tests": {
     "label": "//android_webview/test:webview_trichrome_64_32_cts_tests",
     "type": "script",
+    "module_scheme": "junit",
     "script": "//android_webview/tools/run_cts.py",
     "skip_usage_check": True,
     "args": [
@@ -2124,6 +2412,7 @@
   "webview_trichrome_64_cts_hostside_tests": {
     "label": "//android_webview/test:webview_trichrome_64_cts_hostside_tests",
     "type": "script",
+    "module_scheme": "junit",
     "script": "//android_webview/tools/run_cts.py",
     "skip_usage_check": True,
     "args": [
@@ -2141,6 +2430,7 @@
   "webview_trichrome_64_cts_tests": {
     "label": "//android_webview/test:webview_trichrome_64_cts_tests",
     "type": "script",
+    "module_scheme": "junit",
     "script": "//android_webview/tools/run_cts.py",
     "skip_usage_check": True,
     "args": [
@@ -2160,6 +2450,7 @@
   "webview_trichrome_cts_tests": {
     "label": "//android_webview/test:webview_trichrome_cts_tests",
     "type": "script",
+    "module_scheme": "junit",
     "script": "//android_webview/tools/run_cts.py",
     "skip_usage_check": True,
     "args": [
@@ -2179,21 +2470,25 @@
   "webview_ui_test_app_test_apk": {
     "label": "//android_webview/tools/automated_ui_tests:webview_ui_test_app_test_apk",
     "type": "console_test_launcher",
+    "module_scheme": "junit",
     "skip_usage_check": True,
   },
   "wm_unittests": {
     "label": "//ui/wm:wm_unittests",
     "type": "windowed_test_launcher",
+    "module_scheme": "gtest",
   },
   "wtf_unittests": {
     "label": "//third_party/blink/renderer/platform/wtf:wtf_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
   },
   "xr_browser_tests": {
     "label": "//chrome/test:xr_browser_tests",
     "type": "windowed_test_launcher",
     "executable": "run_xr_browser_tests.py",
     "executable_suffix": "",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
     "args": [
       "--enable-gpu",
@@ -2207,11 +2502,13 @@
   "xvfb_py_unittests": {
     "label": "//testing:xvfb_py_unittests",
     "type": "generated_script",
+    "module_scheme": "single",
     "skip_usage_check": True,
   },
   "zlib_unittests": {
     "label": "//third_party/zlib:zlib_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "args": [
       "--test-launcher-timeout=400000",
     ],
@@ -2219,6 +2516,7 @@
   "zucchini_unittests": {
     "label": "//components/zucchini:zucchini_unittests",
     "type": "console_test_launcher",
+    "module_scheme": "gtest",
     "skip_usage_check": True,
   },
 }
diff --git a/infra/config/generated/testing/test_suites.pyl b/infra/config/generated/testing/test_suites.pyl
index a8d1cfc..c98f17aa 100644
--- a/infra/config/generated/testing/test_suites.pyl
+++ b/infra/config/generated/testing/test_suites.pyl
@@ -915,6 +915,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'info_collection',
         'mixins': [
@@ -931,6 +932,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'mixins': [
           'gpu_integration_test_common_args',
@@ -948,6 +950,7 @@
             'gpu_force_skia_ganesh',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'context_lost',
       },
@@ -962,6 +965,7 @@
             'gpu_integration_test_expected_color_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'expected_color',
       },
@@ -970,6 +974,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'gpu_process',
         'mixins': [
@@ -981,6 +986,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'hardware_accelerated_feature',
         'mixins': [
@@ -998,6 +1004,7 @@
             'gpu_integration_test_pixel_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'pixel',
       },
@@ -1011,6 +1018,7 @@
             'gpu_integration_test_screenshot_sync_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'screenshot_sync',
       },
@@ -1026,6 +1034,7 @@
             'gpu_force_skia_ganesh',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'context_lost',
       },
@@ -1040,6 +1049,7 @@
             'gpu_integration_test_expected_color_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'expected_color',
       },
@@ -1048,6 +1058,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'gpu_process',
         'mixins': [
@@ -1059,6 +1070,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'hardware_accelerated_feature',
         'mixins': [
@@ -1076,6 +1088,7 @@
             'gpu_integration_test_pixel_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'pixel',
       },
@@ -1089,6 +1102,7 @@
             'gpu_integration_test_screenshot_sync_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'screenshot_sync',
       },
@@ -1104,6 +1118,7 @@
             'gpu_force_skia_graphite',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'context_lost',
       },
@@ -1118,6 +1133,7 @@
             'gpu_integration_test_expected_color_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'expected_color',
       },
@@ -1126,6 +1142,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'gpu_process',
         'mixins': [
@@ -1137,6 +1154,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'hardware_accelerated_feature',
         'mixins': [
@@ -1154,6 +1172,7 @@
             'gpu_integration_test_pixel_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'pixel',
       },
@@ -1167,6 +1186,7 @@
             'gpu_integration_test_screenshot_sync_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'screenshot_sync',
       },
@@ -1174,6 +1194,9 @@
 
     'gpu_noop_sleep_telemetry_test': {
       'noop_sleep_tests': {
+        'test_common': {
+          'module_scheme': 'flat',
+        },
         'telemetry_test_name': 'noop_sleep',
         'mixins': [
           'gpu_integration_test_common_args',
@@ -1190,6 +1213,7 @@
             'gpu_force_skia_graphite',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'context_lost',
       },
@@ -1203,6 +1227,7 @@
             'gpu_integration_test_expected_color_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'expected_color',
       },
@@ -1216,6 +1241,7 @@
             'gpu_integration_test_pixel_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'pixel',
       },
@@ -1228,6 +1254,7 @@
             'gpu_integration_test_screenshot_sync_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'screenshot_sync',
       },
@@ -1241,6 +1268,7 @@
             'gpu_force_command_decoder_passthrough',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'context_lost',
       },
@@ -1253,6 +1281,7 @@
             'gpu_integration_test_expected_color_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'expected_color',
       },
@@ -1261,6 +1290,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'gpu_process',
         'mixins': [
@@ -1272,6 +1302,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'hardware_accelerated_feature',
         'mixins': [
@@ -1287,6 +1318,7 @@
             'gpu_integration_test_pixel_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'pixel',
       },
@@ -1298,6 +1330,7 @@
             'gpu_integration_test_screenshot_sync_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'screenshot_sync',
       },
@@ -1310,6 +1343,7 @@
             'skia_gold_test',
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'pixel',
         'mixins': [
@@ -1335,6 +1369,7 @@
             'gpu_force_command_decoder_validating',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'context_lost',
       },
@@ -1347,6 +1382,7 @@
             'gpu_integration_test_expected_color_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'expected_color',
       },
@@ -1355,6 +1391,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'gpu_process',
         'mixins': [
@@ -1366,6 +1403,7 @@
           'mixins': [
             'has_native_resultdb_integration',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'hardware_accelerated_feature',
         'mixins': [
@@ -1381,6 +1419,7 @@
             'gpu_integration_test_pixel_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'pixel',
       },
@@ -1392,6 +1431,7 @@
             'gpu_integration_test_screenshot_sync_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'screenshot_sync',
       },
@@ -1407,6 +1447,7 @@
             'gpu_force_skia_ganesh',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webcodecs',
       },
@@ -1422,6 +1463,7 @@
             'gpu_force_skia_ganesh',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webcodecs',
       },
@@ -1437,6 +1479,7 @@
             'gpu_force_skia_graphite',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webcodecs',
       },
@@ -1449,6 +1492,7 @@
             'has_native_resultdb_integration',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webcodecs',
       },
@@ -1465,6 +1509,7 @@
             'gpu_integration_test_webgl2_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl2_conformance',
         'swarming': {
@@ -1485,6 +1530,7 @@
             'gpu_integration_test_webgl2_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl2_conformance',
         'swarming': {
@@ -1504,6 +1550,7 @@
             'gpu_integration_test_webgl2_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl2_conformance',
         'swarming': {
@@ -1523,6 +1570,7 @@
             'gpu_integration_test_webgl2_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl2_conformance',
         'swarming': {
@@ -1547,6 +1595,7 @@
             'gpu_integration_test_webgl2_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl2_conformance',
         'swarming': {
@@ -1566,6 +1615,7 @@
             'gpu_integration_test_webgl1_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl1_conformance',
         'swarming': {
@@ -1585,6 +1635,7 @@
             'gpu_integration_test_webgl1_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl1_conformance',
         'swarming': {
@@ -1605,6 +1656,7 @@
             'gpu_integration_test_webgl1_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl1_conformance',
         'swarming': {
@@ -1624,6 +1676,7 @@
             'gpu_integration_test_webgl1_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl1_conformance',
         'swarming': {
@@ -1643,6 +1696,7 @@
             'gpu_integration_test_webgl1_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl1_conformance',
         'swarming': {
@@ -1667,6 +1721,7 @@
             'gpu_integration_test_webgl1_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl1_conformance',
       },
@@ -1685,6 +1740,7 @@
             'gpu_integration_test_webgl1_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl1_conformance',
       },
@@ -1699,6 +1755,7 @@
             'gpu_force_angle_swiftshader',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl1_conformance',
         'args': [
@@ -1721,6 +1778,7 @@
             'gpu_integration_test_webgl1_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl1_conformance',
         'swarming': {
@@ -1743,6 +1801,7 @@
             'gpu_integration_test_webgl1_args',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webgl1_conformance',
         'swarming': {
@@ -1761,6 +1820,7 @@
             'gpu_force_skia_ganesh',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webrtc',
       },
@@ -1776,6 +1836,7 @@
             'gpu_force_skia_ganesh',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webrtc',
       },
@@ -1791,6 +1852,7 @@
             'gpu_force_skia_graphite',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webrtc',
       },
@@ -1803,6 +1865,7 @@
             'has_native_resultdb_integration',
             'gpu_integration_test_common_args',
           ],
+          'module_scheme': 'flat',
         },
         'telemetry_test_name': 'webrtc',
       },
diff --git a/infra/config/lib/xcode.star b/infra/config/lib/xcode.star
index 71da73e..3a99cc2 100644
--- a/infra/config/lib/xcode.star
+++ b/infra/config/lib/xcode.star
@@ -12,7 +12,7 @@
     # Xcode 16 beta version used on beta bots.
     x16betabots = _xcode.for_ios("16f6"),
     # Xcode 26 beta version used on beta bots.
-    x26betabots = _xcode.for_ios("17b54"),
+    x26betabots = _xcode.for_ios("17c5013i"),
     # in use by ios-webkit-tot
     x14wk = _xcode.for_ios("14c18wk"),
 )
diff --git a/infra/config/main.star b/infra/config/main.star
index fb8b09c..d116d64 100755
--- a/infra/config/main.star
+++ b/infra/config/main.star
@@ -166,6 +166,7 @@
     platforms = settings.platforms,
     experiments = [
         "targets.module_name_without_slash",
+        "targets.module_scheme_generator",
         "targets.module_scheme_junit_tests",
         "targets.module_scheme_regex",
         "targets.module_scheme_script_tests",
diff --git a/infra/config/targets/bundles.star b/infra/config/targets/bundles.star
index 5d464848..f1883df 100644
--- a/infra/config/targets/bundles.star
+++ b/infra/config/targets/bundles.star
@@ -4980,8 +4980,8 @@
         targets.bundle(
             targets = "ios_common_tests",
             variants = [
-                "SIM_IPAD_AIR_6TH_GEN_26_1",
-                "SIM_IPHONE_16_26_1",
+                "SIM_IPAD_AIR_6TH_GEN_26_2",
+                "SIM_IPHONE_16_26_2",
             ],
         ),
         targets.bundle(
@@ -4990,8 +4990,8 @@
                 "xcodebuild_sim_runner",
             ],
             variants = [
-                "SIM_IPAD_AIR_6TH_GEN_26_1",
-                "SIM_IPHONE_16_26_1",
+                "SIM_IPAD_AIR_6TH_GEN_26_2",
+                "SIM_IPHONE_16_26_2",
             ],
         ),
         targets.bundle(
@@ -5001,8 +5001,8 @@
                 "record_failed_tests",
             ],
             variants = [
-                "SIM_IPAD_AIR_6TH_GEN_26_1",
-                "SIM_IPHONE_16_26_1",
+                "SIM_IPAD_AIR_6TH_GEN_26_2",
+                "SIM_IPHONE_16_26_2",
             ],
         ),
         targets.bundle(
@@ -5012,16 +5012,16 @@
                 "record_failed_tests",
             ],
             variants = [
-                "SIM_IPAD_AIR_6TH_GEN_26_1",
-                "SIM_IPHONE_16_26_1",
+                "SIM_IPAD_AIR_6TH_GEN_26_2",
+                "SIM_IPHONE_16_26_2",
             ],
         ),
         targets.bundle(
             targets = "ios_screen_size_dependent_tests",
             variants = [
-                "SIM_IPAD_AIR_6TH_GEN_26_1",
-                "SIM_IPHONE_16_26_1",
-                "SIM_IPHONE_SE_3RD_GEN_26_1",
+                "SIM_IPAD_AIR_6TH_GEN_26_2",
+                "SIM_IPHONE_16_26_2",
+                "SIM_IPHONE_SE_3RD_GEN_26_2",
             ],
         ),
     ],
@@ -5033,8 +5033,8 @@
         targets.bundle(
             targets = "ios_common_tests",
             variants = [
-                "SIM_IPAD_AIR_6TH_GEN_26_1",
-                "SIM_IPHONE_16_26_1",
+                "SIM_IPAD_AIR_6TH_GEN_26_2",
+                "SIM_IPHONE_16_26_2",
             ],
         ),
         targets.bundle(
@@ -5043,8 +5043,8 @@
                 "xcodebuild_sim_runner",
             ],
             variants = [
-                "SIM_IPAD_AIR_6TH_GEN_26_1",
-                "SIM_IPHONE_16_26_1",
+                "SIM_IPAD_AIR_6TH_GEN_26_2",
+                "SIM_IPHONE_16_26_2",
             ],
         ),
         targets.bundle(
@@ -5053,16 +5053,16 @@
                 "xcodebuild_sim_runner",
             ],
             variants = [
-                "SIM_IPAD_AIR_6TH_GEN_26_1",
-                "SIM_IPHONE_16_26_1",
+                "SIM_IPAD_AIR_6TH_GEN_26_2",
+                "SIM_IPHONE_16_26_2",
             ],
         ),
         targets.bundle(
             targets = "ios_screen_size_dependent_tests",
             variants = [
-                "SIM_IPAD_AIR_6TH_GEN_26_1",
-                "SIM_IPHONE_16_26_1",
-                "SIM_IPHONE_SE_3RD_GEN_26_1",
+                "SIM_IPAD_AIR_6TH_GEN_26_2",
+                "SIM_IPHONE_16_26_2",
+                "SIM_IPHONE_SE_3RD_GEN_26_2",
             ],
         ),
     ],
@@ -5118,7 +5118,7 @@
         targets.bundle(
             targets = "ios_blink_tests",
             variants = [
-                "SIM_IPHONE_15_26_1",
+                "SIM_IPHONE_15_26_2",
             ],
         ),
     ],
diff --git a/infra/config/targets/mixins.star b/infra/config/targets/mixins.star
index de32fb9..ba21ca1 100644
--- a/infra/config/targets/mixins.star
+++ b/infra/config/targets/mixins.star
@@ -1466,13 +1466,13 @@
 )
 
 targets.mixin(
-    name = "ios_runtime_cache_26_1",
+    name = "ios_runtime_cache_26_2",
     generate_pyl_entry = False,
     swarming = targets.swarming(
         named_caches = [
             swarming.cache(
-                name = "runtime_ios_26_1",
-                path = "Runtime-ios-26.1",
+                name = "runtime_ios_26_2",
+                path = "Runtime-ios-26.2",
             ),
         ],
     ),
@@ -2920,12 +2920,12 @@
     generate_pyl_entry = False,
     args = [
         "--xcode-build-version",
-        "17b54",
+        "17c5013i",
     ],
     swarming = targets.swarming(
         named_caches = [
             swarming.cache(
-                name = "xcode_ios_17b54",
+                name = "xcode_ios_17c5013i",
                 path = "Xcode.app",
             ),
         ],
diff --git a/infra/config/targets/variants.star b/infra/config/targets/variants.star
index b07a2f1..9d4959b 100644
--- a/infra/config/targets/variants.star
+++ b/infra/config/targets/variants.star
@@ -340,17 +340,17 @@
 )
 
 targets.variant(
-    name = "SIM_IPAD_AIR_6TH_GEN_26_1",
-    identifier = "iPad Air (6th generation) 26.1",
+    name = "SIM_IPAD_AIR_6TH_GEN_26_2",
+    identifier = "iPad Air (6th generation) 26.2",
     generate_pyl_entry = False,
     mixins = [
-        "ios_runtime_cache_26_1",
+        "ios_runtime_cache_26_2",
     ],
     args = [
         "--platform",
         "iPad Air 11-inch (M2)",
         "--version",
-        "26.1",
+        "26.2",
     ],
 )
 
@@ -549,17 +549,17 @@
 )
 
 targets.variant(
-    name = "SIM_IPHONE_15_26_1",
-    identifier = "iPhone 15 26.1",
+    name = "SIM_IPHONE_15_26_2",
+    identifier = "iPhone 15 26.2",
     generate_pyl_entry = False,
     mixins = [
-        "ios_runtime_cache_26_1",
+        "ios_runtime_cache_26_2",
     ],
     args = [
         "--platform",
         "iPhone 15",
         "--version",
-        "26.1",
+        "26.2",
     ],
 )
 
@@ -594,17 +594,17 @@
 )
 
 targets.variant(
-    name = "SIM_IPHONE_16_26_1",
-    identifier = "iPhone 16 26.1",
+    name = "SIM_IPHONE_16_26_2",
+    identifier = "iPhone 16 26.2",
     generate_pyl_entry = False,
     mixins = [
-        "ios_runtime_cache_26_1",
+        "ios_runtime_cache_26_2",
     ],
     args = [
         "--platform",
         "iPhone 16",
         "--version",
-        "26.1",
+        "26.2",
     ],
 )
 
@@ -759,17 +759,17 @@
 )
 
 targets.variant(
-    name = "SIM_IPHONE_SE_3RD_GEN_26_1",
-    identifier = "iPhone SE (3rd generation) 26.1",
+    name = "SIM_IPHONE_SE_3RD_GEN_26_2",
+    identifier = "iPhone SE (3rd generation) 26.2",
     generate_pyl_entry = False,
     mixins = [
-        "ios_runtime_cache_26_1",
+        "ios_runtime_cache_26_2",
     ],
     args = [
         "--platform",
         "iPhone SE (3rd generation)",
         "--version",
-        "26.1",
+        "26.2",
     ],
 )
 
diff --git a/internal b/internal
index 62509a0..d448ebc 160000
--- a/internal
+++ b/internal
@@ -1 +1 @@
-Subproject commit 62509a008e80f28517d610ec8f9d3750ca81c911
+Subproject commit d448ebcd4132c53725dfe2c6cde9b49eeda160bf
diff --git a/ios/chrome/app/profile/BUILD.gn b/ios/chrome/app/profile/BUILD.gn
index e995beed..9692b4b 100644
--- a/ios/chrome/app/profile/BUILD.gn
+++ b/ios/chrome/app/profile/BUILD.gn
@@ -330,15 +330,18 @@
   public_deps = [ ":profile" ]
   deps = [
     "//base",
+    "//components/password_manager/core/browser",
     "//components/previous_session_info",
     "//components/signin/public/base",
     "//components/signin/public/identity_manager",
     "//ios/chrome/app/profile",
+    "//ios/chrome/browser/first_run/public:best_features_item",
     "//ios/chrome/browser/first_run/ui_bundled:features",
     "//ios/chrome/browser/metrics/model",
     "//ios/chrome/browser/promos_manager/model",
     "//ios/chrome/browser/promos_manager/model:constants",
     "//ios/chrome/browser/promos_manager/model:factory",
+    "//ios/chrome/browser/shared/model/application_context",
     "//ios/chrome/browser/shared/model/profile",
     "//ios/chrome/browser/shared/public/features:system_flags",
     "//ios/chrome/browser/signin/model",
diff --git a/ios/chrome/app/profile/welcome_back_screen_profile_agent.mm b/ios/chrome/app/profile/welcome_back_screen_profile_agent.mm
index 58ab6a6..7d0bc60 100644
--- a/ios/chrome/app/profile/welcome_back_screen_profile_agent.mm
+++ b/ios/chrome/app/profile/welcome_back_screen_profile_agent.mm
@@ -6,18 +6,21 @@
 
 #import "base/check.h"
 #import "base/time/time.h"
+#import "components/password_manager/core/browser/password_manager_util.h"
 #import "components/prefs/pref_service.h"
 #import "components/previous_session_info/previous_session_info.h"
 #import "components/signin/public/base/consent_level.h"
 #import "components/signin/public/identity_manager/identity_manager.h"
 #import "ios/chrome/app/profile/profile_init_stage.h"
 #import "ios/chrome/app/profile/profile_state.h"
+#import "ios/chrome/browser/first_run/public/best_features_item.h"
 #import "ios/chrome/browser/first_run/ui_bundled/features.h"
 #import "ios/chrome/browser/metrics/model/ios_profile_session_durations_service.h"
 #import "ios/chrome/browser/metrics/model/ios_profile_session_durations_service_factory.h"
 #import "ios/chrome/browser/promos_manager/model/constants.h"
 #import "ios/chrome/browser/promos_manager/model/promos_manager.h"
 #import "ios/chrome/browser/promos_manager/model/promos_manager_factory.h"
+#import "ios/chrome/browser/shared/model/application_context/application_context.h"
 #import "ios/chrome/browser/shared/model/profile/profile_ios.h"
 #import "ios/chrome/browser/shared/model/profile/profile_manager_ios.h"
 #import "ios/chrome/browser/shared/public/features/system_flags.h"
@@ -25,6 +28,11 @@
 #import "ios/chrome/browser/welcome_back/model/features.h"
 #import "ios/chrome/browser/welcome_back/model/welcome_back_prefs.h"
 
+namespace {
+// Minimum number of features required to show the promo.
+constexpr size_t kMinEligibleFeatures = 2;
+}  // namespace
+
 @implementation WelcomeBackScreenProfileAgent
 
 #pragma mark - ProfileStateObserver
@@ -70,13 +78,20 @@
       base::Time::FromNSDate(
           [PreviousSessionInfo sharedInstance].sessionEndTime);
 
+  // Mark Autofill feature as used if the Credential Provider Extension is
+  // enabled on startup.
+  PrefService* localState = GetApplicationContext()->GetLocalState();
+  if (password_manager_util::IsCredentialProviderEnabledOnStartup(localState)) {
+    MarkWelcomeBackFeatureUsed(
+        BestFeaturesItemType::kAutofillPasswordsInOtherApps);
+  }
+
   // Only register the promo if a user has been away for >28 days,
   // `kWelcomeBack` is enabled, `kBestFeaturesScreenInFirstRun` is
   // disabled, and there are at least two features eligible for display.
-  size_t number_of_items = GetWelcomeBackEligibleItems().size();
   if (timeSinceActive > base::Days(28) && IsWelcomeBackEnabled() &&
       !base::FeatureList::IsEnabled(first_run::kBestFeaturesScreenInFirstRun) &&
-      number_of_items >= 2) {
+      GetWelcomeBackEligibleItems().size() >= kMinEligibleFeatures) {
     PromosManagerFactory::GetForProfile(self.profileState.profile)
         ->RegisterPromoForSingleDisplay(promos_manager::Promo::WelcomeBack);
   } else {
diff --git a/ios/chrome/app/resources/Settings.bundle/Experimental.plist b/ios/chrome/app/resources/Settings.bundle/Experimental.plist
index 90c8f03..d4437cba5 100644
--- a/ios/chrome/app/resources/Settings.bundle/Experimental.plist
+++ b/ios/chrome/app/resources/Settings.bundle/Experimental.plist
@@ -161,6 +161,7 @@
 				<string>promos_manager::Promo::DockingPromo</string>
 				<string>promos_manager::Promo::BWGPromo</string>
 				<string>promos_manager::Promo::FullscreenSignin</string>
+				<string>promos_manager::Promo::WelcomeBack</string>
 			</array>
 			<key>Titles</key>
 			<array>
@@ -176,6 +177,7 @@
 				<string>Docking Promo</string>
 				<string>BWG Promo</string>
 				<string>Fullscreen sign-in</string>
+				<string>Welcome Back Promo</string>
 			</array>
 		</dict>
 		<dict>
diff --git a/ios/chrome/app/spotlight/spotlight_logger.mm b/ios/chrome/app/spotlight/spotlight_logger.mm
index e103da7..fefa583e 100644
--- a/ios/chrome/app/spotlight/spotlight_logger.mm
+++ b/ios/chrome/app/spotlight/spotlight_logger.mm
@@ -12,7 +12,7 @@
 
 namespace {
 
-NSString* kSpotlightDebuggerErrorLogKey = @"SpotlightDebuggerErrorLogKey";
+NSString* const kSpotlightDebuggerErrorLogKey = @"SpotlightDebuggerErrorLogKey";
 
 }  // namespace
 
diff --git a/ios/chrome/app/startup/ios_chrome_main_delegate.mm b/ios/chrome/app/startup/ios_chrome_main_delegate.mm
index a7006c8..64701bb7 100644
--- a/ios/chrome/app/startup/ios_chrome_main_delegate.mm
+++ b/ios/chrome/app/startup/ios_chrome_main_delegate.mm
@@ -5,6 +5,7 @@
 #import "ios/chrome/app/startup/ios_chrome_main_delegate.h"
 
 #import "base/logging.h"
+#import "base/logging/logging_settings.h"
 #import "third_party/skia/include/core/SkGraphics.h"
 
 IOSChromeMainDelegate::IOSChromeMainDelegate() {}
diff --git a/ios/chrome/app/startup/register_experimental_settings.mm b/ios/chrome/app/startup/register_experimental_settings.mm
index 6045f45..217777e 100644
--- a/ios/chrome/app/startup/register_experimental_settings.mm
+++ b/ios/chrome/app/startup/register_experimental_settings.mm
@@ -11,7 +11,7 @@
 
 namespace {
 // Key in the UserDefaults for the Experimental Keys.
-NSString* kExperimentalKeysKey = @"ExperimentalKeys";
+NSString* const kExperimentalKeysKey = @"ExperimentalKeys";
 
 // Returns YES if a setting value is equivalent to not having the setting at
 // all. This must always be true for default values, otherwise the experimental
diff --git a/ios/chrome/app/variations_app_state_agent.mm b/ios/chrome/app/variations_app_state_agent.mm
index 2c01bfca..3c95987 100644
--- a/ios/chrome/app/variations_app_state_agent.mm
+++ b/ios/chrome/app/variations_app_state_agent.mm
@@ -37,7 +37,8 @@
 using ::variations::VariationsSeedStore;
 
 // The NSUserDefault key to store the time the last seed is fetched.
-NSString* kLastVariationsSeedFetchTimeKey = @"kLastVariationsSeedFetchTime";
+NSString* const kLastVariationsSeedFetchTimeKey =
+    @"kLastVariationsSeedFetchTime";
 
 // Local state key of experiment group assigned, persisted for subsequent runs.
 const char kFirstRunSeedFetchExperimentGroupPref[] = "ios.variations.first_run";
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm
index 6205732..a6ab881 100644
--- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm
+++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm
@@ -39,8 +39,8 @@
 };
 
 // Table view header/footer height.
-CGFloat kSectionHeaderHeight = 8.;
-CGFloat kSectionFooterHeight = 8.;
+constexpr CGFloat kSectionHeaderHeight = 8.;
+constexpr CGFloat kSectionFooterHeight = 8.;
 
 }  // namespace
 
diff --git a/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn b/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn
index 57f8506..3dfa300 100644
--- a/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn
+++ b/ios/chrome/browser/ai_prototyping/coordinator/BUILD.gn
@@ -20,6 +20,8 @@
     "//ios/chrome/browser/intelligence/enhanced_calendar/model",
     "//ios/chrome/browser/intelligence/persist_tab_context/model",
     "//ios/chrome/browser/intelligence/proto_wrappers",
+    "//ios/chrome/browser/intelligence/proto_wrappers:ios_smart_tab_grouping_proto_wrapper",
+    "//ios/chrome/browser/intelligence/smart_tab_grouping/model",
     "//ios/chrome/browser/optimization_guide/model",
     "//ios/chrome/browser/optimization_guide/mojom",
     "//ios/chrome/browser/shared/coordinator/chrome_coordinator",
diff --git a/ios/chrome/browser/ai_prototyping/coordinator/DEPS b/ios/chrome/browser/ai_prototyping/coordinator/DEPS
index a7e2fdb1..720a1e6 100644
--- a/ios/chrome/browser/ai_prototyping/coordinator/DEPS
+++ b/ios/chrome/browser/ai_prototyping/coordinator/DEPS
@@ -5,4 +5,5 @@
   "+ios/chrome/browser/optimization_guide/mojom",
   "+ios/chrome/browser/intelligence/enhanced_calendar/model",
   "+ios/chrome/browser/intelligence/persist_tab_context/model",
+  "+ios/chrome/browser/intelligence/smart_tab_grouping/model",
 ]
diff --git a/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm b/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm
index 6feec49a..edc93c1d 100644
--- a/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm
+++ b/ios/chrome/browser/ai_prototyping/coordinator/ai_prototyping_mediator.mm
@@ -7,6 +7,7 @@
 #import <string>
 
 #import "base/functional/bind.h"
+#import "base/strings/string_number_conversions.h"
 #import "base/strings/stringprintf.h"
 #import "base/strings/sys_string_conversions.h"
 #import "base/strings/utf_string_conversions.h"
@@ -15,6 +16,7 @@
 #import "components/optimization_guide/proto/features/bling_prototyping.pb.h"
 #import "components/optimization_guide/proto/features/common_quality_data.pb.h"
 #import "components/optimization_guide/proto/features/enhanced_calendar.pb.h"
+#import "components/optimization_guide/proto/features/ios_smart_tab_grouping.pb.h"
 #import "components/optimization_guide/proto/features/tab_organization.pb.h"
 #import "components/optimization_guide/proto/string_value.pb.h"  // nogncheck
 #import "ios/chrome/browser/ai_prototyping/model/ai_prototyping_service_impl.h"
@@ -22,8 +24,10 @@
 #import "ios/chrome/browser/ai_prototyping/ui/ai_prototyping_consumer.h"
 #import "ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h"
 #import "ios/chrome/browser/intelligence/enhanced_calendar/model/enhanced_calendar_service_impl.h"
+#import "ios/chrome/browser/intelligence/proto_wrappers/ios_smart_tab_grouping_request_wrapper.h"
 #import "ios/chrome/browser/intelligence/proto_wrappers/page_context_wrapper.h"
 #import "ios/chrome/browser/intelligence/proto_wrappers/tab_organization_request_wrapper.h"
+#import "ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.h"
 #import "ios/chrome/browser/optimization_guide/model/optimization_guide_service.h"
 #import "ios/chrome/browser/optimization_guide/model/optimization_guide_service_factory.h"
 #import "ios/chrome/browser/optimization_guide/mojom/enhanced_calendar_service.mojom-forward.h"
@@ -60,6 +64,13 @@
   std::unique_ptr<ai::EnhancedCalendarServiceImpl>
       _enhanced_calendar_service_impl;
 
+  // Remote used to make calls to functions related to
+  // 'SmartTabGroupingService'.
+  mojo::Remote<ai::mojom::SmartTabGroupingService> _smartTabGroupingService;
+  // Instatiated to pipe virtual remote calls to overriden functions in
+  // 'SmartTabGroupingServiceImpl'.
+  std::unique_ptr<ai::SmartTabGroupingServiceImpl> _smartTabGroupingServiceImpl;
+
   // The Tab Organization feature's request wrapper.
   TabOrganizationRequestWrapper* _tabOrganizationRequestWrapper;
 
@@ -105,6 +116,14 @@
         std::make_unique<ai::EnhancedCalendarServiceImpl>(
             std::move(enhanced_calendar_receiver),
             _webStateList->GetActiveWebState());
+
+    mojo::PendingReceiver<ai::mojom::SmartTabGroupingService>
+        smartTabGroupingReceiver =
+            _smartTabGroupingService.BindNewPipeAndPassReceiver();
+    _smartTabGroupingServiceImpl =
+        std::make_unique<ai::SmartTabGroupingServiceImpl>(
+            std::move(smartTabGroupingReceiver), _webStateList,
+            _persistTabContextBrowserAgent);
   }
   return self;
 }
@@ -247,6 +266,22 @@
   [_tabOrganizationRequestWrapper populateRequestFieldsAsync];
 }
 
+- (void)executeSmartTabGrouping {
+  __weak __typeof(self) weakSelf = self;
+  auto handleResponseBlock =
+      ^void(ai::mojom::SmartTabGroupingResponseResultPtr result) {
+        [weakSelf handleSmartTabGroupingResponseResult:std::move(result)];
+      };
+
+  base::OnceCallback<void(ai::mojom::SmartTabGroupingResponseResultPtr)>
+      handleResponseCallback = base::BindOnce(handleResponseBlock);
+
+  // Call the service to execute the request, the service will handle the
+  // request population.
+  _smartTabGroupingService->ExecuteSmartTabGroupingRequest(
+      std::move(handleResponseCallback));
+}
+
 - (void)executeEnhancedCalendarQueryWithPrompt:(NSString*)prompt
                                   selectedText:(NSString*)selectedText {
   // Create and set the request params.
@@ -355,4 +390,54 @@
   return result;
 }
 
+// Handles the SmartTabGroupingResponse by outputting the response proto or
+// an error message into the result text field.
+- (void)handleSmartTabGroupingResponseResult:
+    (ai::mojom::SmartTabGroupingResponseResultPtr)response_result {
+  if (response_result->is_error()) {
+    [self.consumer
+        updateQueryResult:base::SysUTF8ToNSString(response_result->get_error())
+               forFeature:AIPrototypingFeature::kSmartTabGrouping];
+    return;
+  }
+
+  std::string result = [self
+      serializeSmartTabGroupingResponseToString:
+          response_result->get_response()
+              .As<optimization_guide::proto::IosSmartTabGroupingResponse>()
+              .value()];
+
+  [self.consumer updateQueryResult:base::SysUTF8ToNSString(result)
+                        forFeature:AIPrototypingFeature::kSmartTabGrouping];
+}
+
+// Serializes the IosSmartTabGroupingResponse proto into a human-readable
+// string.
+- (std::string)serializeSmartTabGroupingResponseToString:
+    (const optimization_guide::proto::IosSmartTabGroupingResponse&)
+        response_proto {
+  std::string result;
+  result += "iOS Smart Tab Grouping Response:\n\n";
+
+  for (const auto& group : response_proto.tab_groups()) {
+    result += base::StringPrintf("Group: %s %s\n", group.emoji().c_str(),
+                                 group.label().c_str());
+
+    std::vector<std::string> tab_ids_str;
+    for (int64_t tab_id : group.tab_ids()) {
+      tab_ids_str.push_back(base::NumberToString(tab_id));
+    }
+    result += "Tabs: ";
+    for (size_t i = 0; i < tab_ids_str.size(); ++i) {
+      result += tab_ids_str[i];
+      if (i < tab_ids_str.size() - 1) {
+        result += ", ";
+      }
+    }
+    result += "\n\n";
+  }
+
+  return result;
+}
+
 @end
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h
index bdfb6101..9a74b70 100644
--- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_mutator.h
@@ -28,11 +28,15 @@
                              model:(optimization_guide::proto::
                                         BlingPrototypingRequest_ModelEnum)model;
 
+// TODO(crbug.com/460813653): Remove deprecated TabOrganization functions.
 // Executes a tab organization request with a given organization `strategy`.
 - (void)executeGroupTabsWithStrategy:
     (optimization_guide::proto::
          TabOrganizationRequest_TabOrganizationModelStrategy)strategy;
 
+// Executes a tab organization request.
+- (void)executeSmartTabGrouping;
+
 // Executes an enhanced calendar request with a given (optional) prompt and
 // selected text.
 - (void)executeEnhancedCalendarQueryWithPrompt:(NSString*)prompt
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm
index d9f5985d..6eb7fcf 100644
--- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_tab_organization_view_controller.mm
@@ -129,7 +129,7 @@
 - (void)onGroupTabsButtonPressed:(UIButton*)button {
   [self disableSubmitButton];
   [self updateResponseField:@""];
-  [self.mutator executeGroupTabsWithStrategy:self.groupingStrategy];
+  [self.mutator executeSmartTabGrouping];
 }
 
 #pragma mark - AIPrototypingViewControllerProtocol
diff --git a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm
index bb33620..6bc8354f 100644
--- a/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm
+++ b/ios/chrome/browser/ai_prototyping/ui/ai_prototyping_view_controller.mm
@@ -34,7 +34,7 @@
             [[AIPrototypingFreeformViewController alloc]
                 initForFeature:AIPrototypingFeature::kFreeform],
             [[AIPrototypingTabOrganizationViewController alloc]
-                initForFeature:AIPrototypingFeature::kTabOrganization],
+                initForFeature:AIPrototypingFeature::kSmartTabGrouping],
             [[AIPrototypingCalendarViewController alloc]
                 initForFeature:AIPrototypingFeature::kEnhancedCalendar],
             nil];
diff --git a/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h b/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h
index 6ff1303..e50c1d3 100644
--- a/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h
+++ b/ios/chrome/browser/ai_prototyping/utils/ai_prototyping_constants.h
@@ -24,10 +24,13 @@
   // Represents the `kBlingPrototyping` feature used for flexible model
   // querying.
   kFreeform,
+  // TODO(crbug.com/460813653): Remove deprecated TabOrganization constants.
   // Represents the tab organization/grouping feature.
   kTabOrganization,
   // Represents the enhanced calendar feature.
   kEnhancedCalendar,
+  // Represents the new smart tab grouping feature.
+  kSmartTabGrouping,
 };
 
 #endif  // IOS_CHROME_BROWSER_AI_PROTOTYPING_UTILS_AI_PROTOTYPING_CONSTANTS_H_
diff --git a/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm
index e504e24e..6f66780 100644
--- a/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm
+++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm
@@ -11,10 +11,10 @@
 
 namespace {
 // Top margin for the label.
-CGFloat kTopMargin = 20.;
-CGFloat kBottomMargin = 15;
+constexpr CGFloat kTopMargin = 20.;
+constexpr CGFloat kBottomMargin = 15;
 // Leading margin for the label.
-CGFloat kLeadingMargin = 24.;
+constexpr CGFloat kLeadingMargin = 24.;
 }  // namespace
 
 @interface IdentityChooserHeaderView : UITableViewHeaderFooterView
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm
index 3df63ef..948c12c 100644
--- a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm
+++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm
@@ -43,8 +43,8 @@
 };
 
 // Table view header/footer height.
-CGFloat kSectionHeaderHeight = 8.;
-CGFloat kSectionFooterHeight = 8.;
+constexpr CGFloat kSectionHeaderHeight = 8.;
+constexpr CGFloat kSectionFooterHeight = 8.;
 
 }  // namespace
 
diff --git a/ios/chrome/browser/autofill/model/autofill_controller_js_unittest.mm b/ios/chrome/browser/autofill/model/autofill_controller_js_unittest.mm
index 2cfae54a..298638f 100644
--- a/ios/chrome/browser/autofill/model/autofill_controller_js_unittest.mm
+++ b/ios/chrome/browser/autofill/model/autofill_controller_js_unittest.mm
@@ -82,7 +82,7 @@
 }
 
 // clang-format off
-NSString* kHTMLForTestingElements = @"<html><body>"
+NSString* const kHTMLForTestingElements = @"<html><body>"
     "<input type=hidden name='gl' value='us'>"
     "<form name='testform'>"
     "  <input type=hidden name='hl' value='en'>"
diff --git a/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.h b/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.h
index 5909386b..a28f4c1 100644
--- a/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.h
+++ b/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.h
@@ -131,7 +131,6 @@
   void HideAutofillSuggestions(SuggestionHidingReason reason) override;
   bool IsAutofillEnabled() const override;
   bool IsAutofillProfileEnabled() const override;
-  bool IsAutofillPaymentMethodsEnabled() const override;
   bool IsWalletStorageEnabled() const override;
   bool IsAutocompleteEnabled() const override;
   bool IsPasswordManagerEnabled() const override;
diff --git a/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.mm b/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.mm
index bad4df8..26694efa 100644
--- a/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.mm
+++ b/ios/chrome/browser/autofill/ui_bundled/chrome_autofill_client_ios.mm
@@ -382,17 +382,15 @@
 }
 
 bool ChromeAutofillClientIOS::IsAutofillEnabled() const {
-  return IsAutofillProfileEnabled() || IsAutofillPaymentMethodsEnabled();
+  return IsAutofillProfileEnabled() ||
+         AutofillClient::GetPaymentsAutofillClient()
+             ->IsAutofillPaymentMethodsEnabled();
 }
 
 bool ChromeAutofillClientIOS::IsAutofillProfileEnabled() const {
   return prefs::IsAutofillProfileEnabled(GetPrefs());
 }
 
-bool ChromeAutofillClientIOS::IsAutofillPaymentMethodsEnabled() const {
-  return prefs::IsAutofillPaymentMethodsEnabled(GetPrefs());
-}
-
 bool ChromeAutofillClientIOS::IsWalletStorageEnabled() const {
   return false;
 }
diff --git a/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.h b/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.h
index a0d65f9..b3f5a64 100644
--- a/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.h
+++ b/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.h
@@ -160,6 +160,7 @@
       base::OnceClosure cancel_mandatory_reauth_callback,
       base::RepeatingClosure close_mandatory_reauth_callback) override;
   void ShowMandatoryReauthOptInConfirmation() override;
+  bool IsAutofillPaymentMethodsEnabled() const final;
   IbanManager* GetIbanManager() override;
   IbanAccessManager* GetIbanAccessManager() override;
   MerchantPromoCodeManager* GetMerchantPromoCodeManager() override;
diff --git a/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.mm b/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.mm
index c2e42240..31dbf2b 100644
--- a/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.mm
+++ b/ios/chrome/browser/autofill/ui_bundled/ios_chrome_payments_autofill_client.mm
@@ -45,6 +45,7 @@
 #import "components/autofill/core/browser/ui/payments/card_unmask_prompt_view.h"
 #import "components/autofill/core/browser/ui/payments/virtual_card_enroll_ui_model.h"
 #import "components/autofill/core/common/autofill_payments_features.h"
+#import "components/autofill/core/common/autofill_prefs.h"
 #import "components/autofill/ios/browser/credit_card_save_metrics_ios.h"
 #import "ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.h"
 #import "ios/chrome/browser/autofill/model/credit_card/autofill_save_card_infobar_delegate_ios.h"
@@ -482,6 +483,10 @@
 
 void IOSChromePaymentsAutofillClient::ShowMandatoryReauthOptInConfirmation() {}
 
+bool IOSChromePaymentsAutofillClient::IsAutofillPaymentMethodsEnabled() const {
+  return autofill::prefs::IsAutofillPaymentMethodsEnabled(pref_service_);
+}
+
 IbanManager* IOSChromePaymentsAutofillClient::GetIbanManager() {
   return nullptr;
 }
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm
index 2557ddfc..5c9b749 100644
--- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm
+++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm
@@ -42,13 +42,13 @@
 const char kFormElementCardExpirationMonth[] = "CCExpiresMonth";
 const char kFormElementCardExpirationYear[] = "CCExpiresYear";
 
-NSString* kLocalCardNumber = @"4111111111111111";
-NSString* kLocalCardHolder = @"Test User";
+NSString* const kLocalCardNumber = @"4111111111111111";
+NSString* const kLocalCardHolder = @"Test User";
 // The local card's expiration month and year (only the last two digits) are set
 // with next month and next year.
-NSString* kLocalCardExpirationMonth =
+NSString* const kLocalCardExpirationMonth =
     base::SysUTF8ToNSString(autofill::test::NextMonth());
-NSString* kLocalCardExpirationYear =
+NSString* const kLocalCardExpirationYear =
     base::SysUTF8ToNSString(autofill::test::NextYear().substr(2, 2));
 
 // Unicode characters used in card number:
@@ -58,16 +58,16 @@
 constexpr char16_t kMidlineEllipsis[] = {
     0x2022, 0x2060, 0x2006, 0x2060, 0x2022, 0x2060, 0x2006, 0x2060, 0x2022,
     0x2060, 0x2006, 0x2060, 0x2022, 0x2060, 0x2006, 0x2060, 0};
-NSString* kObfuscatedNumberPrefix = base::SysUTF16ToNSString(
+NSString* const kObfuscatedNumberPrefix = base::SysUTF16ToNSString(
     kMidlineEllipsis + std::u16string(separator) + kMidlineEllipsis +
     std::u16string(separator) + kMidlineEllipsis + std::u16string(separator));
 
-NSString* kLocalNumberObfuscated =
+NSString* const kLocalNumberObfuscated =
     [NSString stringWithFormat:@"%@1111", kObfuscatedNumberPrefix];
 
-NSString* kServerNumberObfuscated =
+NSString* const kServerNumberObfuscated =
     [NSString stringWithFormat:@"%@2109", kObfuscatedNumberPrefix];
-NSString* kCvcObfuscated =
+NSString* const kCvcObfuscated =
     base::SysUTF16ToNSString(autofill::CreditCard::GetMidlineEllipsisDots(3));
 
 const char kFormHTMLFile[] = "/credit_card.html";
diff --git a/ios/chrome/browser/browser_container/ui_bundled/browser_edit_menu_handler_unittest.mm b/ios/chrome/browser/browser_container/ui_bundled/browser_edit_menu_handler_unittest.mm
index e975442..799983fc 100644
--- a/ios/chrome/browser/browser_container/ui_bundled/browser_edit_menu_handler_unittest.mm
+++ b/ios/chrome/browser/browser_container/ui_bundled/browser_edit_menu_handler_unittest.mm
@@ -74,11 +74,11 @@
       stringWithFormat:@"%d:u:%@", indent, menuElement.description] ];
 }
 
-NSString* kPageHTML = @"<html>"
-                       "  <body>"
-                       "    This is a simple HTML file."
-                       "  </body>"
-                       "</html>";
+NSString* const kPageHTML = @"<html>"
+                             "  <body>"
+                             "    This is a simple HTML file."
+                             "  </body>"
+                             "</html>";
 
 // Return the base menu depending on the environment.
 NSMutableArray* GetExpectedMenu() {
diff --git a/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm b/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm
index a26ada57..a825412 100644
--- a/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm
+++ b/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm
@@ -19,7 +19,7 @@
 namespace {
 
 // FirstRunRecency key, should match the one in `system_flags`.
-NSString* kFirstRunRecencyKey = @"FirstRunRecency";
+NSString* const kFirstRunRecencyKey = @"FirstRunRecency";
 
 // Constant for timeout while waiting for a gestural IPH to appear or disappear.
 const base::TimeDelta kWaitForGestureIPHTimeOut = base::Seconds(3);
diff --git a/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm b/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm
index 34b2ba74..307acb97 100644
--- a/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm
+++ b/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm
@@ -31,23 +31,23 @@
 namespace {
 
 // Identifier for long press on notification and open menu categories.
-NSString* kCommerceCategoryIdentifier = @"PriceDropNotifications";
+NSString* const kCommerceCategoryIdentifier = @"PriceDropNotifications";
 // Identifier if user taps notification (doesn't long press and
 // choose from options).
-NSString* kDefaultActionIdentifier =
+NSString* const kDefaultActionIdentifier =
     @"com.apple.UNNotificationDefaultActionIdentifier";
 // Opaque payload key from notification service.
-NSString* kSerializedPayloadKey = @"op";
+NSString* const kSerializedPayloadKey = @"op";
 // Identifier for user pressing 'Visit site' option after long pressing
 // notification.
-NSString* kVisitSiteActionIdentifier = @"visit_site";
+NSString* const kVisitSiteActionIdentifier = @"visit_site";
 // Text for option for long press.
-NSString* kVisitSiteTitle = @"Visit site";
+NSString* const kVisitSiteTitle = @"Visit site";
 // Identifier for user pressing 'Untrack price' after long pressing
 // notification.
-NSString* kUntrackPriceIdentifier = @"untrack_price";
+NSString* const kUntrackPriceIdentifier = @"untrack_price";
 // Text for option 'Untrack price' when long pressing notification.
-NSString* kUntrackPriceTitle = @"Untrack price";
+NSString* const kUntrackPriceTitle = @"Untrack price";
 
 // Returns an arbitrary profile amongst the currently loaded profile. This
 // means that this API is not safe when there are multiple profiles. Instead
diff --git a/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client_unittest.mm b/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client_unittest.mm
index a1aea85..25b7d17 100644
--- a/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client_unittest.mm
+++ b/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client_unittest.mm
@@ -59,11 +59,11 @@
 std::string kBookmarkTitle = "My product title";
 constexpr uint64_t kClusterId = 12345L;
 constexpr char kPayloadValue[] = "value";
-NSString* kSerializedPayloadKey = @"op";
-NSString* kVisitSiteActionId = @"visit_site";
-NSString* kVisitSiteTitle = @"Visit site";
-NSString* kUntrackPriceActionId = @"untrack_price";
-NSString* kUntrackPriceTitle = @"Untrack price";
+NSString* const kSerializedPayloadKey = @"op";
+NSString* const kVisitSiteActionId = @"visit_site";
+NSString* const kVisitSiteTitle = @"Visit site";
+NSString* const kUntrackPriceActionId = @"untrack_price";
+NSString* const kUntrackPriceTitle = @"Untrack price";
 constexpr char kUntrackSuccessHistogramName[] =
     "Commerce.PriceTracking.Untrack.Success";
 
diff --git a/ios/chrome/browser/composebox/coordinator/composebox_input_plate_mediator.mm b/ios/chrome/browser/composebox/coordinator/composebox_input_plate_mediator.mm
index f218bbe9..3a7bd21 100644
--- a/ios/chrome/browser/composebox/coordinator/composebox_input_plate_mediator.mm
+++ b/ios/chrome/browser/composebox/coordinator/composebox_input_plate_mediator.mm
@@ -28,6 +28,7 @@
 #import "base/unguessable_token.h"
 #import "components/lens/contextual_input.h"
 #import "components/lens/lens_bitmap_processing.h"
+#import "components/omnibox/browser/lens_suggest_inputs_utils.h"
 #import "components/omnibox/common/omnibox_features.h"
 #import "components/omnibox/composebox/ios/composebox_file_upload_observer_bridge.h"
 #import "components/omnibox/composebox/ios/composebox_query_controller_ios.h"
@@ -591,9 +592,11 @@
     case contextual_search::FileUploadStatus::kUploadExpired:
       item.state = ComposeboxInputItemState::kError;
       break;
+    case contextual_search::FileUploadStatus::kProcessingSuggestSignalsReady:
+      [self.delegate reloadAutocompleteSuggestions];
+      break;
     case contextual_search::FileUploadStatus::kNotUploaded:
     case contextual_search::FileUploadStatus::kProcessing:
-    case contextual_search::FileUploadStatus::kProcessingSuggestSignalsReady:
     case contextual_search::FileUploadStatus::kUploadStarted:
       // No-op, as the state is already `Uploading`.
       return;
@@ -823,6 +826,14 @@
 
 #pragma mark - ComposeboxOmniboxClientDelegate
 
+- (std::optional<lens::proto::LensOverlaySuggestInputs>)suggestInputs {
+  if (!_composeboxQueryController) {
+    return std::nullopt;
+  }
+
+  return _composeboxQueryController->suggest_inputs();
+}
+
 - (BOOL)isAIModeEnabled {
   return _AIModeEnabled;
 }
diff --git a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.h b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.h
index bcd2cc34..bf4294c 100644
--- a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.h
+++ b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.h
@@ -110,6 +110,10 @@
                            web::NavigationContext* navigation_context) override;
   void WebStateDestroyed(web::WebState* web_state) override;
 
+  // Returns the LensOverlaySuggestInputs if available.
+  std::optional<lens::proto::LensOverlaySuggestInputs>
+  GetLensOverlaySuggestInputs() const override;
+
  private:
   // Object associated with a web state id in `web_state_tracker_`. If the
   // navigation succeeds, the shortcut is stored in the ShortcutsDatabase.
diff --git a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.mm b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.mm
index f4dd7b9..2d2f272 100644
--- a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.mm
+++ b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client.mm
@@ -165,6 +165,11 @@
       is_prefetch);
 }
 
+std::optional<lens::proto::LensOverlaySuggestInputs>
+ComposeboxOmniboxClient::GetLensOverlaySuggestInputs() const {
+  return [delegate_ suggestInputs];
+}
+
 security_state::SecurityLevel ComposeboxOmniboxClient::GetSecurityLevel()
     const {
   return location_bar_->GetLocationBarModel()->GetSecurityLevel();
diff --git a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client_delegate.h b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client_delegate.h
index dfa9c0c9..fd78ff8 100644
--- a/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client_delegate.h
+++ b/ios/chrome/browser/composebox/coordinator/composebox_omnibox_client_delegate.h
@@ -10,6 +10,9 @@
 /// Delegate for ComposeboxOmniboxClient.
 @protocol ComposeboxOmniboxClientDelegate
 
+/// Returns the current attached suggest input in the composebox.
+- (std::optional<lens::proto::LensOverlaySuggestInputs>)suggestInputs;
+
 /// Returns YES if AI Mode is enabled.
 - (BOOL)isAIModeEnabled;
 
diff --git a/ios/chrome/browser/composebox/ui/composebox_input_plate_view_controller.mm b/ios/chrome/browser/composebox/ui/composebox_input_plate_view_controller.mm
index 7db15862..a44f8f2c 100644
--- a/ios/chrome/browser/composebox/ui/composebox_input_plate_view_controller.mm
+++ b/ios/chrome/browser/composebox/ui/composebox_input_plate_view_controller.mm
@@ -821,6 +821,9 @@
 
   _glowEffectView = ios::provider::CreateGlowEffect(
       CGRectZero, kInputPlateCornerRadius, kGlowEffectWidth);
+  // Temporarily remove the glow effect view while its broken (the effect
+  // doesn't stop rotating).
+  _glowEffectView = nil;
   if (_glowEffectView) {
     _glowEffectView.translatesAutoresizingMaskIntoConstraints = NO;
     _glowEffectView.userInteractionEnabled = NO;
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn
index 151d51b..303a432 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn
@@ -64,7 +64,7 @@
     "//ios/chrome/browser/content_suggestions/ui_bundled/magic_stack:utils",
     "//ios/chrome/browser/content_suggestions/ui_bundled/price_tracking_promo/coordinator",
     "//ios/chrome/browser/content_suggestions/ui_bundled/safety_check",
-    "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self",
+    "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator",
     "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list",
     "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list:default_browser_promo",
     "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list:utils",
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/cells/BUILD.gn
index 68483c7..ee9faa19 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/BUILD.gn
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/cells/BUILD.gn
@@ -164,15 +164,11 @@
     "content_suggestions_cells_constants.mm",
     "content_suggestions_tile_constants.h",
     "content_suggestions_tile_constants.mm",
-    "content_suggestions_tile_layout_util.h",
-    "content_suggestions_tile_layout_util.mm",
   ]
 
   deps = [
     "//ios/chrome/app/strings",
     "//ios/chrome/browser/shared/ui/symbols",
-    "//ios/chrome/browser/shared/ui/util",
-    "//ios/chrome/common/ui/util",
     "//ui/base",
   ]
 }
@@ -180,7 +176,6 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
-    "content_suggestions_tile_layout_util_unittest.mm",
     "content_suggestions_tile_saver_unittest.mm",
     "most_visited_tiles_mediator_unittest.mm",
     "shortcuts_mediator_unittest.mm",
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.h b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.h
index 7071162..770f1ec0 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.h
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.h
@@ -12,6 +12,13 @@
 // index value of the Shortcuts content.
 const int kShortcutMinimumIndex = 4;
 
+// Vertical spacing between rows of tiles.
+extern const int kContentSuggestionsTilesVerticalSpacing;
+
+// Vertical spacing between columns of tiles.
+extern const int kContentSuggestionsTilesHorizontalSpacingRegular;
+extern const int kContentSuggestionsTilesHorizontalSpacingCompact;
+
 // Enum listing the collection shortcuts on NTP and similar surfaces.
 typedef NS_ENUM(NSInteger, NTPCollectionShortcutType) {
   NTPCollectionShortcutTypeBookmark = kShortcutMinimumIndex,
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.mm b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.mm
index 8b762925..34e23ec 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.mm
@@ -18,6 +18,10 @@
 
 }  // namespace
 
+const int kContentSuggestionsTilesHorizontalSpacingRegular = 19;
+
+const int kContentSuggestionsTilesHorizontalSpacingCompact = 5;
+
 NSString* TitleForCollectionShortcutType(NTPCollectionShortcutType type) {
   switch (type) {
     case NTPCollectionShortcutTypeBookmark:
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h
deleted file mode 100644
index 4a07c56e..0000000
--- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2019 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_CELLS_CONTENT_SUGGESTIONS_TILE_LAYOUT_UTIL_H_
-#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_CELLS_CONTENT_SUGGESTIONS_TILE_LAYOUT_UTIL_H_
-
-#import <UIKit/UIKit.h>
-
-// Vertical spacing between rows of tiles.
-extern const int kContentSuggestionsTilesVerticalSpacing;
-// Vertical spacing between columns of tiles.
-extern const int kContentSuggestionsTilesHorizontalSpacingRegular;
-extern const int kContentSuggestionsTilesHorizontalSpacingCompact;
-
-// For font size < UIContentSizeCategoryExtraExtraExtraLarge.
-extern const CGSize kContentSuggestionsTileViewSizeSmall;
-// For font size == UIContentSizeCategoryExtraExtraExtraLarge.
-extern const CGSize kContentSuggestionsTileViewSizeMedium;
-// For font size == UIContentSizeCategoryAccessibilityMedium.
-extern const CGSize kContentSuggestionsTileViewSizeLarge;
-// For font size > UIContentSizeCategoryAccessibilityMedium.
-extern const CGSize kContentSuggestionsTileViewSizeExtraLarge;
-
-// Returns the vertical spacing between columns of tiles under
-// `trait_collection`.
-CGFloat ContentSuggestionsTilesHorizontalSpacing(
-    UITraitCollection* trait_collection);
-
-// Returns the size of most visited cell based on `category`.
-CGSize MostVisitedCellSize(UIContentSizeCategory category);
-
-// Returns x-offset in order to have the tiles centered in a view with a
-// `width` under `environment`.
-CGFloat CenteredTilesMarginForWidth(UITraitCollection* trait_collection,
-                                    CGFloat width);
-
-// Returns horizontal space needed to show the Most Visited tiles.
-CGFloat MostVisitedTilesContentHorizontalSpace(
-    UITraitCollection* trait_collection);
-
-#endif  // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_CELLS_CONTENT_SUGGESTIONS_TILE_LAYOUT_UTIL_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.mm b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.mm
deleted file mode 100644
index 3a9d90e..0000000
--- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.mm
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2019 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h"
-
-#import "base/notreached.h"
-#import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h"
-#import "ios/chrome/common/ui/util/ui_util.h"
-
-const int kContentSuggestionsTilesVerticalSpacing = 16;
-const int kContentSuggestionsTilesHorizontalSpacingRegular = 19;
-const int kContentSuggestionsTilesHorizontalSpacingCompact = 5;
-
-const CGSize kContentSuggestionsTileViewSizeSmall = {/*width=*/73,
-                                                     /*height=*/100};
-const CGSize kContentSuggestionsTileViewSizeMedium = {/*width=*/73,
-                                                      /*height=*/112};
-const CGSize kContentSuggestionsTileViewSizeLarge = {/*width=*/110,
-                                                     /*height=*/140};
-const CGSize kContentSuggestionsTileViewSizeExtraLarge = {/*width=*/146,
-                                                          /*height=*/150};
-
-namespace {
-// Display at most 4 tiles per row.
-const int kMaxNumberOfTilesPerRow = 4;
-}  // namespace
-
-CGFloat ContentSuggestionsTilesHorizontalSpacing(
-    UITraitCollection* trait_collection) {
-  return (trait_collection.horizontalSizeClass !=
-              UIUserInterfaceSizeClassCompact &&
-          trait_collection.verticalSizeClass != UIUserInterfaceSizeClassCompact)
-             ? kContentSuggestionsTilesHorizontalSpacingRegular
-             : kContentSuggestionsTilesHorizontalSpacingCompact;
-}
-
-CGSize MostVisitedCellSize(UIContentSizeCategory category) {
-  NSComparisonResult result = UIContentSizeCategoryCompareToCategory(
-      category, UIContentSizeCategoryAccessibilityMedium);
-  BOOL isSmallestSize =
-      UIContentSizeCategoryCompareToCategory(
-          category, UIContentSizeCategoryExtraLarge) == NSOrderedAscending;
-  switch (result) {
-    case NSOrderedAscending:
-      return isSmallestSize ? kContentSuggestionsTileViewSizeSmall
-                            : kContentSuggestionsTileViewSizeMedium;
-    case NSOrderedSame:
-      return kContentSuggestionsTileViewSizeLarge;
-    case NSOrderedDescending:
-      return kContentSuggestionsTileViewSizeExtraLarge;
-  }
-}
-
-CGFloat CenteredTilesMarginForWidth(UITraitCollection* trait_collection,
-                                    CGFloat width) {
-  CGFloat horizontalSpace =
-      ContentSuggestionsTilesHorizontalSpacing(trait_collection);
-  CGSize cellSize =
-      MostVisitedCellSize(trait_collection.preferredContentSizeCategory);
-  for (int columns = kMaxNumberOfTilesPerRow; columns > 0; --columns) {
-    CGFloat whitespace =
-        width - (columns * cellSize.width) - ((columns - 1) * horizontalSpace);
-    CGFloat margin = AlignValueToPixel(whitespace / 2);
-    if (margin >= horizontalSpace) {
-      return margin;
-    }
-  }
-  NOTREACHED();
-}
-
-CGFloat MostVisitedTilesContentHorizontalSpace(
-    UITraitCollection* trait_collection) {
-  CGFloat horizontalSpace =
-      ContentSuggestionsTilesHorizontalSpacing(trait_collection);
-  CGSize cellSize =
-      MostVisitedCellSize(trait_collection.preferredContentSizeCategory);
-  // Sum up the space taken up by all the tiles and space between them.
-  CGFloat width = (kMaxNumberOfTilesPerRow * cellSize.width) +
-                  ((kMaxNumberOfTilesPerRow - 1) * horizontalSpace);
-  return width;
-}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util_unittest.mm b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util_unittest.mm
deleted file mode 100644
index dfc299b3..0000000
--- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util_unittest.mm
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2019 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h"
-
-#import <UIKit/UIKit.h>
-
-#import "testing/platform_test.h"
-#import "third_party/ocmock/OCMock/OCMock.h"
-
-using ContentSuggestionsTileLayoutUtilTest = PlatformTest;
-
-// Tests that MostVisitedCellSize returns correct size for all content size
-// categories.
-TEST_F(ContentSuggestionsTileLayoutUtilTest, MostVisitedCellSize) {
-  EXPECT_TRUE(
-      CGSizeEqualToSize(kContentSuggestionsTileViewSizeSmall,
-                        MostVisitedCellSize(UIContentSizeCategoryUnspecified)));
-  EXPECT_TRUE(
-      CGSizeEqualToSize(kContentSuggestionsTileViewSizeSmall,
-                        MostVisitedCellSize(UIContentSizeCategoryExtraSmall)));
-  EXPECT_TRUE(
-      CGSizeEqualToSize(kContentSuggestionsTileViewSizeSmall,
-                        MostVisitedCellSize(UIContentSizeCategorySmall)));
-  EXPECT_TRUE(
-      CGSizeEqualToSize(kContentSuggestionsTileViewSizeSmall,
-                        MostVisitedCellSize(UIContentSizeCategoryMedium)));
-  EXPECT_TRUE(
-      CGSizeEqualToSize(kContentSuggestionsTileViewSizeSmall,
-                        MostVisitedCellSize(UIContentSizeCategoryLarge)));
-  EXPECT_TRUE(
-      CGSizeEqualToSize(kContentSuggestionsTileViewSizeMedium,
-                        MostVisitedCellSize(UIContentSizeCategoryExtraLarge)));
-  EXPECT_TRUE(CGSizeEqualToSize(
-      kContentSuggestionsTileViewSizeMedium,
-      MostVisitedCellSize(UIContentSizeCategoryExtraExtraLarge)));
-  EXPECT_TRUE(CGSizeEqualToSize(
-      kContentSuggestionsTileViewSizeMedium,
-      MostVisitedCellSize(UIContentSizeCategoryExtraExtraExtraLarge)));
-  EXPECT_TRUE(CGSizeEqualToSize(
-      kContentSuggestionsTileViewSizeLarge,
-      MostVisitedCellSize(UIContentSizeCategoryAccessibilityMedium)));
-  EXPECT_TRUE(CGSizeEqualToSize(
-      kContentSuggestionsTileViewSizeExtraLarge,
-      MostVisitedCellSize(UIContentSizeCategoryAccessibilityLarge)));
-  EXPECT_TRUE(CGSizeEqualToSize(
-      kContentSuggestionsTileViewSizeExtraLarge,
-      MostVisitedCellSize(UIContentSizeCategoryAccessibilityExtraLarge)));
-  EXPECT_TRUE(CGSizeEqualToSize(
-      kContentSuggestionsTileViewSizeExtraLarge,
-      MostVisitedCellSize(UIContentSizeCategoryAccessibilityExtraExtraLarge)));
-  EXPECT_TRUE(CGSizeEqualToSize(
-      kContentSuggestionsTileViewSizeExtraLarge,
-      MostVisitedCellSize(
-          UIContentSizeCategoryAccessibilityExtraExtraExtraLarge)));
-}
-
-// Tests that CenteredTilesMarginForWidth works under various environment.
-TEST_F(ContentSuggestionsTileLayoutUtilTest, CenteredTilesMarginForWidth) {
-  // Set up Regular size class and Large font size.
-  UITraitCollection* trait_collection;
-  trait_collection = [UITraitCollection
-      traitCollectionWithTraits:^(id<UIMutableTraits> mutableTraits) {
-        mutableTraits.horizontalSizeClass = UIUserInterfaceSizeClassRegular;
-        mutableTraits.preferredContentSizeCategory = UIContentSizeCategoryLarge;
-      }];
-
-  // Display 4 columns on very big screen.
-  EXPECT_EQ(200, CenteredTilesMarginForWidth(
-                     trait_collection,
-                     kContentSuggestionsTileViewSizeSmall.width * 4 +
-                         kContentSuggestionsTilesHorizontalSpacingRegular * 3 +
-                         200 * 2));
-  // Display 4 columns on normal screen.
-  EXPECT_EQ(20, CenteredTilesMarginForWidth(
-                    trait_collection,
-                    kContentSuggestionsTileViewSizeSmall.width * 4 +
-                        kContentSuggestionsTilesHorizontalSpacingRegular * 3 +
-                        20 * 2));
-  // Display 3 columns.
-  EXPECT_EQ(20, CenteredTilesMarginForWidth(
-                    trait_collection,
-                    kContentSuggestionsTileViewSizeSmall.width * 3 +
-                        kContentSuggestionsTilesHorizontalSpacingRegular * 2 +
-                        20 * 2));
-  // Display 2 columns.
-  EXPECT_EQ(20, CenteredTilesMarginForWidth(
-                    trait_collection,
-                    kContentSuggestionsTileViewSizeSmall.width * 2 +
-                        kContentSuggestionsTilesHorizontalSpacingRegular * 1 +
-                        20 * 2));
-  // Display 1 columns.
-  EXPECT_EQ(20, CenteredTilesMarginForWidth(
-                    trait_collection,
-                    kContentSuggestionsTileViewSizeSmall.width * 1 +
-                        kContentSuggestionsTilesHorizontalSpacingRegular * 0 +
-                        20 * 2));
-
-  // Set up Compact size class and Accessibility Large font size.
-  trait_collection = [UITraitCollection
-      traitCollectionWithTraits:^(id<UIMutableTraits> mutableTraits) {
-        mutableTraits.horizontalSizeClass = UIUserInterfaceSizeClassCompact;
-        mutableTraits.preferredContentSizeCategory =
-            UIContentSizeCategoryAccessibilityLarge;
-      }];
-
-  // Display 4 columns.
-  EXPECT_EQ(20, CenteredTilesMarginForWidth(
-                    trait_collection,
-                    kContentSuggestionsTileViewSizeExtraLarge.width * 4 +
-                        kContentSuggestionsTilesHorizontalSpacingCompact * 3 +
-                        20 * 2));
-  // Display 3 columns.
-  EXPECT_EQ(20, CenteredTilesMarginForWidth(
-                    trait_collection,
-                    kContentSuggestionsTileViewSizeExtraLarge.width * 3 +
-                        kContentSuggestionsTilesHorizontalSpacingCompact * 2 +
-                        20 * 2));
-  // Display 2 columns.
-  EXPECT_EQ(20, CenteredTilesMarginForWidth(
-                    trait_collection,
-                    kContentSuggestionsTileViewSizeExtraLarge.width * 2 +
-                        kContentSuggestionsTilesHorizontalSpacingCompact * 1 +
-                        20 * 2));
-  // Display 1 columns.
-  EXPECT_EQ(20, CenteredTilesMarginForWidth(
-                    trait_collection,
-                    kContentSuggestionsTileViewSizeExtraLarge.width * 1 +
-                        kContentSuggestionsTilesHorizontalSpacingCompact * 0 +
-                        20 * 2));
-}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_view.mm b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_view.mm
index 234a2f0..fdd23177 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_view.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_view.mm
@@ -4,7 +4,6 @@
 
 #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_view.h"
 
-#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h"
 #import "ios/chrome/browser/shared/ui/util/dynamic_type_util.h"
 #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_collection_utils_unittest.mm b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_collection_utils_unittest.mm
index 2a81987b..4a5a8d7 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_collection_utils_unittest.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_collection_utils_unittest.mm
@@ -18,7 +18,7 @@
 
 namespace content_suggestions {
 
-CGFloat kDoodleHeightNoLogo = 0;
+constexpr CGFloat kDoodleHeightNoLogo = 0;
 
 class ContentSuggestionsCollectionUtilsTest : public PlatformTest {
  public:
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm
index ea00e4a4..ef76a617 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_coordinator.mm
@@ -73,7 +73,7 @@
 #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_item_type.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_magic_stack_mediator.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/utils.h"
-#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h"
+#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_default_browser_promo_coordinator.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_default_browser_promo_coordinator_delegate.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_item_view.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller.mm b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller.mm
index ae4b360..ad2ea25 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_view_controller.mm
@@ -27,9 +27,6 @@
 
 @property(nonatomic, strong) URLDragDropHandler* dragDropHandler;
 
-// StackView holding all subviews.
-@property(nonatomic, strong) UIStackView* verticalStackView;
-
 // List of all UITapGestureRecognizers created for the Most Visisted tiles.
 @property(nonatomic, strong)
     NSMutableArray<UITapGestureRecognizer*>* mostVisitedTapRecognizers;
@@ -57,30 +54,6 @@
                                 initWithDelegate:self.dragDropHandler]];
   self.view.backgroundColor = [UIColor clearColor];
   self.view.accessibilityIdentifier = kContentSuggestionsCollectionIdentifier;
-
-  self.verticalStackView = [[UIStackView alloc] init];
-  self.verticalStackView.translatesAutoresizingMaskIntoConstraints = NO;
-  self.verticalStackView.axis = UILayoutConstraintAxisVertical;
-  // A centered alignment will ensure the views are centered.
-  self.verticalStackView.alignment = UIStackViewAlignmentCenter;
-  // A fill distribution allows for the custom spacing between elements and
-  // height/width configurations for each row.
-  self.verticalStackView.distribution = UIStackViewDistributionFill;
-  [self.view addSubview:self.verticalStackView];
-
-  [NSLayoutConstraint activateConstraints:@[
-    [self.verticalStackView.leadingAnchor
-        constraintEqualToAnchor:self.view.leadingAnchor],
-    [self.verticalStackView.trailingAnchor
-        constraintEqualToAnchor:self.view.trailingAnchor],
-    [self.verticalStackView.topAnchor
-        constraintEqualToAnchor:self.view.topAnchor
-                       constant:content_suggestions::HeaderBottomPadding(
-                                    self.traitCollection)],
-    [self.verticalStackView.bottomAnchor
-        constraintEqualToAnchor:self.view.bottomAnchor]
-  ]];
-
   if (_mostVisitedTileConfig.mostVisitedItems.count > 0) {
     [self createAndInsertMostVisitedModule];
   }
@@ -122,9 +95,8 @@
       [[MagicStackModuleContainer alloc] initWithFrame:CGRectZero];
   [self.mostVisitedModuleContainer configureWithConfig:_mostVisitedTileConfig];
   // If viewDidLoad has been called before the first valid Most Visited Tiles
-  // are available, construct `mostVisitedStackView`.
-  if (self.verticalStackView &&
-      _mostVisitedTileConfig.mostVisitedItems.count > 0) {
+  // are available, construct the most visited tiles.
+  if (_mostVisitedTileConfig.mostVisitedItems.count > 0) {
     [self createAndInsertMostVisitedModule];
   }
 
@@ -140,21 +112,21 @@
 
 #pragma mark - Private
 
-- (void)addUIElement:(UIView*)view withCustomBottomSpacing:(CGFloat)spacing {
-  [self.verticalStackView addArrangedSubview:view];
-  if (spacing > 0) {
-    [self.verticalStackView setCustomSpacing:spacing afterView:view];
-  }
-}
-
 - (void)createAndInsertMostVisitedModule {
-  [self.verticalStackView insertArrangedSubview:self.mostVisitedModuleContainer
-                                        atIndex:0];
+  [self.view addSubview:self.mostVisitedModuleContainer];
+  self.mostVisitedModuleContainer.translatesAutoresizingMaskIntoConstraints =
+      NO;
   [NSLayoutConstraint activateConstraints:@[
-    [self.mostVisitedModuleContainer.widthAnchor
-        constraintEqualToAnchor:self.view.widthAnchor],
-    [self.mostVisitedModuleContainer.centerXAnchor
-        constraintEqualToAnchor:self.view.centerXAnchor],
+    [self.mostVisitedModuleContainer.leadingAnchor
+        constraintEqualToAnchor:self.view.leadingAnchor],
+    [self.mostVisitedModuleContainer.trailingAnchor
+        constraintEqualToAnchor:self.view.trailingAnchor],
+    [self.mostVisitedModuleContainer.topAnchor
+        constraintEqualToAnchor:self.view.topAnchor
+                       constant:content_suggestions::HeaderBottomPadding(
+                                    self.traitCollection)],
+    [self.mostVisitedModuleContainer.bottomAnchor
+        constraintEqualToAnchor:self.view.bottomAnchor]
   ]];
   [self.view layoutIfNeeded];
 }
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/BUILD.gn
index b938737..e20c605 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/BUILD.gn
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/BUILD.gn
@@ -62,7 +62,8 @@
     "//ios/chrome/browser/content_suggestions/ui_bundled/price_tracking_promo/ui",
     "//ios/chrome/browser/content_suggestions/ui_bundled/safety_check",
     "//ios/chrome/browser/content_suggestions/ui_bundled/safety_check:prefs",
-    "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self",
+    "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator",
+    "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui",
     "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list",
     "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list:utils",
     "//ios/chrome/browser/content_suggestions/ui_bundled/shop_card",
@@ -159,7 +160,7 @@
     "//ios/chrome/browser/content_suggestions/ui_bundled/default_browser/ui",
     "//ios/chrome/browser/content_suggestions/ui_bundled/price_tracking_promo/ui",
     "//ios/chrome/browser/content_suggestions/ui_bundled/safety_check",
-    "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self",
+    "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui",
     "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list",
     "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list:constants",
     "//ios/chrome/browser/content_suggestions/ui_bundled/set_up_list:utils",
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_collection_view.mm b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_collection_view.mm
index 3fc95070..e014d11 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_collection_view.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_collection_view.mm
@@ -11,7 +11,6 @@
 #import "base/metrics/histogram_macros.h"
 #import "base/numerics/safe_conversions.h"
 #import "components/segmentation_platform/public/features.h"
-#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_constants.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/edit_button_config.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_collection_view_audience.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_container.mm b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_container.mm
index e82a5828..d54389f 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_container.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_container.mm
@@ -9,7 +9,6 @@
 #import "base/strings/sys_string_conversions.h"
 #import "components/commerce/core/commerce_feature_list.h"
 #import "google_apis/gaia/gaia_id.h"
-#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/most_visited_tiles_config.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_collection_utils.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_constants.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_contents_factory.mm b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_contents_factory.mm
index 8690789..1fc4d78 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_contents_factory.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_contents_factory.mm
@@ -8,7 +8,7 @@
 #import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_config.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/app_bundle_promo/ui/app_bundle_promo_view.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_shortcut_tile_view.h"
-#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h"
+#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_constants.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/most_visited_tiles_stack_view.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/multi_row_container_view.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/cells/shortcuts_commands.h"
@@ -24,7 +24,7 @@
 #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_consumer_source.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_state.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_view.h"
-#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h"
+#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/constants.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_config.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_consumer_source.h"
@@ -46,6 +46,21 @@
 #import "ios/chrome/browser/content_suggestions/ui_bundled/tips/ui/tips_module_view.h"
 #import "ios/chrome/browser/shared/public/features/features.h"
 
+namespace {
+
+// Returns the vertical spacing between columns of tiles under
+// `trait_collection`.
+CGFloat ContentSuggestionsTilesHorizontalSpacing(
+    UITraitCollection* trait_collection) {
+  return (trait_collection.horizontalSizeClass !=
+              UIUserInterfaceSizeClassCompact &&
+          trait_collection.verticalSizeClass != UIUserInterfaceSizeClassCompact)
+             ? kContentSuggestionsTilesHorizontalSpacingRegular
+             : kContentSuggestionsTilesHorizontalSpacingCompact;
+}
+
+}  // namespace
+
 @implementation MagicStackModuleContentsFactory
 
 - (UIView*)contentViewForConfig:(MagicStackModule*)config
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_ranking_model.mm b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_ranking_model.mm
index 2f4cc29..53f53878 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_ranking_model.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_ranking_model.mm
@@ -62,8 +62,9 @@
 #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_magic_stack_mediator.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_prefs.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_state.h"
-#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h"
-#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h"
+#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h"
+#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator_delegate.h"
+#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_config.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_item_view_data.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/set_up_list/set_up_list_mediator.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/BUILD.gn
similarity index 74%
rename from ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/BUILD.gn
rename to ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/BUILD.gn
index 959297a..a569f46 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/BUILD.gn
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/BUILD.gn
@@ -1,27 +1,24 @@
-# Copyright 2024 The Chromium Authors
+# Copyright 2025 The Chromium Authors
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-source_set("send_tab_to_self") {
+source_set("coordinator") {
   sources = [
-    "send_tab_promo_item.h",
-    "send_tab_promo_item.mm",
     "send_tab_promo_mediator.h",
     "send_tab_promo_mediator.mm",
+    "send_tab_promo_mediator_delegate.h",
   ]
   deps = [
     "//base",
     "//components/prefs",
     "//components/send_tab_to_self",
-    "//ios/chrome/app/strings",
     "//ios/chrome/browser/content_suggestions/ui_bundled:constants",
     "//ios/chrome/browser/content_suggestions/ui_bundled:promo_module_ui",
     "//ios/chrome/browser/content_suggestions/ui_bundled/magic_stack:public",
+    "//ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui",
     "//ios/chrome/browser/favicon/model",
-    "//ios/chrome/browser/shared/ui/symbols",
     "//ios/chrome/common/ui/favicon",
     "//ios/chrome/common/ui/favicon:favicon_constants",
-    "//ui/base",
     "//url",
   ]
 }
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h
similarity index 77%
rename from ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h
rename to ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h
index c7af113..1e4e409 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_MEDIATOR_H_
-#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_MEDIATOR_H_
+#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_H_
 
 #import <UIKit/UIKit.h>
 
@@ -13,18 +13,7 @@
 @protocol MagicStackModuleContainerDelegate;
 class PrefService;
 @class SendTabPromoItem;
-
-// Delegate handling events from the SendTabPromoMediator.
-@protocol SendTabPromoMediatorDelegate
-
-// Signals that the user has received a tab sent from one of their other
-// devices.
-- (void)sentTabReceived;
-
-// Signals that the Send Tab Promo Module should be removed.
-- (void)removeSendTabPromoModule;
-
-@end
+@protocol SendTabPromoMediatorDelegate;
 
 // Mediator for managing the state of the Send Tab to Self Promo Magic Stack
 // module.
@@ -57,4 +46,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_MEDIATOR_H_
+#endif  // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.mm b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.mm
similarity index 93%
rename from ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.mm
rename to ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.mm
index 1689c382..45133fd 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_mediator.h"
+#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator.h"
 
 #import "base/memory/raw_ptr.h"
 #import "base/metrics/histogram_functions.h"
@@ -10,7 +10,8 @@
 #import "components/send_tab_to_self/pref_names.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_constants.h"
 #import "ios/chrome/browser/content_suggestions/ui_bundled/magic_stack/magic_stack_module_container_delegate.h"
-#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h"
+#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator_delegate.h"
+#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h"
 #import "ios/chrome/browser/favicon/model/favicon_loader.h"
 #import "ios/chrome/common/ui/favicon/favicon_attributes.h"
 #import "ios/chrome/common/ui/favicon/favicon_constants.h"
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator_delegate.h b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator_delegate.h
new file mode 100644
index 0000000..e2ab489
--- /dev/null
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/coordinator/send_tab_promo_mediator_delegate.h
@@ -0,0 +1,20 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_DELEGATE_H_
+#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_DELEGATE_H_
+
+// Delegate handling events from the SendTabPromoMediator.
+@protocol SendTabPromoMediatorDelegate
+
+// Signals that the user has received a tab sent from one of their other
+// devices.
+- (void)sentTabReceived;
+
+// Signals that the Send Tab Promo Module should be removed.
+- (void)removeSendTabPromoModule;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_COORDINATOR_SEND_TAB_PROMO_MEDIATOR_DELEGATE_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/BUILD.gn
new file mode 100644
index 0000000..5d7ea83
--- /dev/null
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/BUILD.gn
@@ -0,0 +1,17 @@
+# Copyright 2025 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("ui") {
+  sources = [
+    "send_tab_promo_item.h",
+    "send_tab_promo_item.mm",
+  ]
+  deps = [
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/content_suggestions/ui_bundled:constants",
+    "//ios/chrome/browser/content_suggestions/ui_bundled:promo_module_ui",
+    "//ios/chrome/browser/shared/ui/symbols",
+    "//ui/base",
+  ]
+}
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h
similarity index 82%
rename from ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h
rename to ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h
index c546a04a..f9b893c9 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h
@@ -1,9 +1,8 @@
 // Copyright 2024 The Chromium Authors
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_ITEM_H_
-#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_ITEM_H_
+#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_UI_SEND_TAB_PROMO_ITEM_H_
+#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_UI_SEND_TAB_PROMO_ITEM_H_
 
 #import "ios/chrome/browser/content_suggestions/ui_bundled/standalone_module_item.h"
 
@@ -12,4 +11,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_SEND_TAB_PROMO_ITEM_H_
+#endif  // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_UI_BUNDLED_SEND_TAB_TO_SELF_UI_SEND_TAB_PROMO_ITEM_H_
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.mm b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.mm
similarity index 96%
rename from ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.mm
rename to ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.mm
index a9333d2..62b1509 100644
--- a/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.mm
+++ b/ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/send_tab_promo_item.h"
+#import "ios/chrome/browser/content_suggestions/ui_bundled/send_tab_to_self/ui/send_tab_promo_item.h"
 
 #import "ios/chrome/browser/content_suggestions/ui_bundled/content_suggestions_constants.h"
 #import "ios/chrome/browser/shared/ui/symbols/symbols.h"
diff --git a/ios/chrome/browser/docking_promo/coordinator/docking_promo_mediator_unittest.mm b/ios/chrome/browser/docking_promo/coordinator/docking_promo_mediator_unittest.mm
index cfe649f..7746172 100644
--- a/ios/chrome/browser/docking_promo/coordinator/docking_promo_mediator_unittest.mm
+++ b/ios/chrome/browser/docking_promo/coordinator/docking_promo_mediator_unittest.mm
@@ -30,7 +30,7 @@
 
 namespace {
 
-NSString* kFirstRunRecencyKey = @"FirstRunRecency";
+NSString* const kFirstRunRecencyKey = @"FirstRunRecency";
 
 }  // namespace
 
diff --git a/ios/chrome/browser/download/coordinator/auto_deletion/auto_deletion_coordinator.mm b/ios/chrome/browser/download/coordinator/auto_deletion/auto_deletion_coordinator.mm
index 03d9bea2..f5bfc496 100644
--- a/ios/chrome/browser/download/coordinator/auto_deletion/auto_deletion_coordinator.mm
+++ b/ios/chrome/browser/download/coordinator/auto_deletion/auto_deletion_coordinator.mm
@@ -25,19 +25,19 @@
 
 namespace {
 // The number of bytes in a KB.
-CGFloat kBytesInKiloBytes = 1000;
+constexpr CGFloat kBytesInKiloBytes = 1000;
 // The number of KB in a MB.
-CGFloat kKiloBytesInMegaBytes = 1000;
+constexpr CGFloat kKiloBytesInMegaBytes = 1000;
 // The number of bytes in MB.
-CGFloat kBytesInMegaBytes = kBytesInKiloBytes * kKiloBytesInMegaBytes;
+constexpr CGFloat kBytesInMegaBytes = kBytesInKiloBytes * kKiloBytesInMegaBytes;
 // The threshold where if the user has less than this percentage of storage
 // remaining on their device then the Auto-deletion IPH should be shown. This
 // value is a percentage.
-CGFloat kAvailableStorageThreshold = 2.0;
+constexpr CGFloat kAvailableStorageThreshold = 2.0;
 // The threshold where if a file downloaded onto the device is greater than this
 // value then the Auto-deletion IPH should be shown. This value is in units of
 // MB.
-CGFloat kLargeFileSizeThreshold = 20.0;
+constexpr CGFloat kLargeFileSizeThreshold = 20.0;
 }  // namespace
 
 typedef void (^UIAlertActionHandler)(UIAlertAction* action);
diff --git a/ios/chrome/browser/download/ui/download_manager_egtest.mm b/ios/chrome/browser/download/ui/download_manager_egtest.mm
index d9aaa452..ba88d1e0 100644
--- a/ios/chrome/browser/download/ui/download_manager_egtest.mm
+++ b/ios/chrome/browser/download/ui/download_manager_egtest.mm
@@ -39,7 +39,7 @@
 namespace {
 
 // Accessibility ID of the Activity menu.
-NSString* kActivityMenuIdentifier = @"ActivityListView";
+NSString* const kActivityMenuIdentifier = @"ActivityListView";
 
 // Scroll to the top of the Reading List.
 void ScrollToTop() {
diff --git a/ios/chrome/browser/drive/model/drive_list.mm b/ios/chrome/browser/drive/model/drive_list.mm
index bda6562..643e476 100644
--- a/ios/chrome/browser/drive/model/drive_list.mm
+++ b/ios/chrome/browser/drive/model/drive_list.mm
@@ -12,15 +12,15 @@
 // The size of the drive file picker item icon.
 constexpr CGFloat kDriveFilePickerItemIconSize = 18;
 // Prefix of MIME types associated with images.
-NSString* kImageMIMETypePrefix = @"image/";
+NSString* const kImageMIMETypePrefix = @"image/";
 // Prefix of the icon link for shortcuts.
-NSString* kShortcutImageLinkPrefix =
+NSString* const kShortcutImageLinkPrefix =
     @"https://drive-thirdparty.googleusercontent.com/64/type/";
 // Prefix of links to icons in the Drive third-party icon repository.
-NSString* kDriveIconRepositoryPrefix =
+NSString* const kDriveIconRepositoryPrefix =
     @"https://drive-thirdparty.googleusercontent.com/";
 // MIME type for folder items.
-NSString* kFolderMIMEType = @"application/vnd.google-apps.folder";
+NSString* const kFolderMIMEType = @"application/vnd.google-apps.folder";
 
 }  // namespace
 
diff --git a/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator_helper.mm b/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator_helper.mm
index 48e42f79..f8efd88 100644
--- a/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator_helper.mm
+++ b/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator_helper.mm
@@ -26,25 +26,26 @@
 constexpr NSInteger kNextPageSize = 50;
 
 // extra_term parameter for the Starred view.
-NSString* kStarredExtraTerm = @"starred=true";
+NSString* const kStarredExtraTerm = @"starred=true";
 // extra_term parameter for the Recent view.
-NSString* kRecentExtraTerm = @"mimeType!='application/vnd.google-apps.folder'";
+NSString* const kRecentExtraTerm =
+    @"mimeType!='application/vnd.google-apps.folder'";
 // order_by parameter for the Recent view.
-NSString* kRecentOrderBy = @"recency desc";
+NSString* const kRecentOrderBy = @"recency desc";
 // extra_term parameter for the Shared with me view.
-NSString* kSharedWithMeExtraTerm = @"sharedWithMe=true";
+NSString* const kSharedWithMeExtraTerm = @"sharedWithMe=true";
 // order_by parameter for the Shared with me view.
-NSString* kSharedWithMeOrderBy = @"sharedWithMeTime desc";
+NSString* const kSharedWithMeOrderBy = @"sharedWithMeTime desc";
 // The key word to sort items in an ascending order.
-NSString* kAscendingQueryOrder = @"asc";
+NSString* const kAscendingQueryOrder = @"asc";
 // The key word to sort items in an descending order.
-NSString* kDescendingQueryOrder = @"desc";
+NSString* const kDescendingQueryOrder = @"desc";
 // The key word to sort items by name.
-NSString* kQueryOrderNameType = @"name";
+NSString* const kQueryOrderNameType = @"name";
 // The key word to sort items by opening time.
-NSString* kQueryOrderOpeningType = @"viewedByMeTime";
+NSString* const kQueryOrderOpeningType = @"viewedByMeTime";
 // The key word to sort items by modification time.
-NSString* kQueryOrderModifiedType = @"modifiedTime";
+NSString* const kQueryOrderModifiedType = @"modifiedTime";
 // String representing any audio MIME type.
 const char kAnyAudioFileMimeType[] = "audio/*";
 // String representing any video MIME type.
@@ -52,7 +53,7 @@
 // String representing any image MIME type.
 const char kAnyImageFileMimeType[] = "image/*";
 // extra_term parameter for the "Archives" filter.
-NSString* kOnlyShowArchivesExtraTerm =
+NSString* const kOnlyShowArchivesExtraTerm =
     @"(mimeType='application/zip' or"
      " mimeType='application/x-7z-compressed' or"
      " mimeType='application/x-rar-compressed' or"
@@ -64,20 +65,20 @@
      " mimeType='application/java-archive' or"
      " mimeType='application/gzip')";
 // extra_term parameter for the "Audio" filter.
-NSString* kOnlyShowAudioExtraTerm = @"mimeType contains 'audio/'";
+NSString* const kOnlyShowAudioExtraTerm = @"mimeType contains 'audio/'";
 // extra_term parameter for the "Video" filter.
-NSString* kOnlyShowVideosExtraTerm = @"mimeType contains 'video/'";
+NSString* const kOnlyShowVideosExtraTerm = @"mimeType contains 'video/'";
 // extra_term parameter for the "Photos & Images" filter.
-NSString* kOnlyShowImagesExtraTerm = @"mimeType contains 'image/'";
+NSString* const kOnlyShowImagesExtraTerm = @"mimeType contains 'image/'";
 // extra_term parameter for the "PDFs" filter.
-NSString* kOnlyShowPDFsExtraTerm = @"mimeType='application/pdf'";
+NSString* const kOnlyShowPDFsExtraTerm = @"mimeType='application/pdf'";
 // extra_term parameter to add folders to a filter.
-NSString* kAlsoShowFoldersExtraTerm =
+NSString* const kAlsoShowFoldersExtraTerm =
     @"mimeType='application/vnd.google-apps.folder'";
 // Prefix of MIME types associated with Google apps.
-NSString* kGoogleAppsMIMETypePrefix = @"application/vnd.google-apps.";
+NSString* const kGoogleAppsMIMETypePrefix = @"application/vnd.google-apps.";
 // MIME type for folder items.
-NSString* kFolderMIMEType = @"application/vnd.google-apps.folder";
+NSString* const kFolderMIMEType = @"application/vnd.google-apps.folder";
 
 // Replaces `/` and `\` characters with `_` in `file_path` and returns the
 // result.
diff --git a/ios/chrome/browser/enterprise/connectors/connectors_service.h b/ios/chrome/browser/enterprise/connectors/connectors_service.h
index dfa68f0..762b5851 100644
--- a/ios/chrome/browser/enterprise/connectors/connectors_service.h
+++ b/ios/chrome/browser/enterprise/connectors/connectors_service.h
@@ -24,7 +24,7 @@
 // - OnSecurityEventEnterpriseConnectors
 class ConnectorsService : public ConnectorsServiceBase, public KeyedService {
  public:
-  ConnectorsService(ProfileIOS* profile);
+  explicit ConnectorsService(ProfileIOS* profile);
   ~ConnectorsService() override;
 
   // Returns the CBCM domain or profile domain that enables connector policies.
@@ -48,8 +48,6 @@
   bool ConnectorsEnabled() const override;
   PrefService* GetPrefs() override;
   const PrefService* GetPrefs() const override;
-  ConnectorsManagerBase* GetConnectorsManagerBase() override;
-  const ConnectorsManagerBase* GetConnectorsManagerBase() const override;
   policy::CloudPolicyManager* GetManagedUserCloudPolicyManager() const override;
 
  private:
@@ -59,7 +57,6 @@
   FRIEND_TEST_ALL_PREFIXES(ConnectorsServiceTest, ConnectorsEnabled);
 
   raw_ptr<ProfileIOS> profile_;
-  std::unique_ptr<ConnectorsManager> connectors_manager_;
 };
 
 }  // namespace enterprise_connectors
diff --git a/ios/chrome/browser/enterprise/connectors/connectors_service.mm b/ios/chrome/browser/enterprise/connectors/connectors_service.mm
index 986213c5..dc3a1bd 100644
--- a/ios/chrome/browser/enterprise/connectors/connectors_service.mm
+++ b/ios/chrome/browser/enterprise/connectors/connectors_service.mm
@@ -21,11 +21,12 @@
 
 namespace enterprise_connectors {
 
-ConnectorsService::ConnectorsService(ProfileIOS* profile) : profile_(profile) {
+ConnectorsService::ConnectorsService(ProfileIOS* profile)
+    : ConnectorsServiceBase(
+          std::make_unique<ConnectorsManager>(profile->GetPrefs(),
+                                              GetServiceProviderConfig())),
+      profile_(profile) {
   CHECK(profile_);
-
-  connectors_manager_ = std::make_unique<ConnectorsManager>(
-      profile_->GetPrefs(), GetServiceProviderConfig());
 }
 
 ConnectorsService::~ConnectorsService() = default;
@@ -43,16 +44,16 @@
     policy_scope = dm_token.value().scope;
   }
 
-    // Machine scope has precedence, only update the scope if the previous
-    // policy is not already machine-scoped.
-    if (policy_scope != policy::PolicyScope::POLICY_SCOPE_MACHINE) {
-      if (std::optional<DmToken> dm_token =
-              GetDmToken(kOnSecurityEventScopePref)) {
-        policy_scope = dm_token.value().scope;
-      }
+  // Machine scope has precedence, only update the scope if the previous
+  // policy is not already machine-scoped.
+  if (policy_scope != policy::PolicyScope::POLICY_SCOPE_MACHINE) {
+    if (std::optional<DmToken> dm_token =
+            GetDmToken(kOnSecurityEventScopePref)) {
+      policy_scope = dm_token.value().scope;
     }
+  }
 
-    return enterprise::GetManagementDomain(policy_scope, profile_);
+  return enterprise::GetManagementDomain(policy_scope, profile_);
 }
 
 bool ConnectorsService::IsConnectorEnabled(AnalysisConnector connector) const {
@@ -98,15 +99,6 @@
   return profile_->GetPrefs();
 }
 
-ConnectorsManagerBase* ConnectorsService::GetConnectorsManagerBase() {
-  return connectors_manager_.get();
-}
-
-const ConnectorsManagerBase* ConnectorsService::GetConnectorsManagerBase()
-    const {
-  return connectors_manager_.get();
-}
-
 policy::CloudPolicyManager*
 ConnectorsService::GetManagedUserCloudPolicyManager() const {
   return profile_->GetUserCloudPolicyManager();
diff --git a/ios/chrome/browser/first_run/ui_bundled/best_features/coordinator/best_features_screen_detail_coordinator.mm b/ios/chrome/browser/first_run/ui_bundled/best_features/coordinator/best_features_screen_detail_coordinator.mm
index 6b0957f..7ca93f8 100644
--- a/ios/chrome/browser/first_run/ui_bundled/best_features/coordinator/best_features_screen_detail_coordinator.mm
+++ b/ios/chrome/browser/first_run/ui_bundled/best_features/coordinator/best_features_screen_detail_coordinator.mm
@@ -52,7 +52,7 @@
   _viewController = [[FeatureHighlightScreenshotViewController alloc]
       initWithFeatureHighlightItem:_bestFeaturesItem];
   _viewController.actionHandler = self;
-  _baseNavigationController.delegate = _viewController;
+  _baseNavigationController.navigationBarHidden = NO;
   [_baseNavigationController pushViewController:_viewController animated:YES];
 }
 
diff --git a/ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.mm b/ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.mm
index cca9872..1600dc5 100644
--- a/ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.mm
+++ b/ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.mm
@@ -98,6 +98,14 @@
     textStackView.translatesAutoresizingMaskIntoConstraints = NO;
     [contentView addSubview:textStackView];
 
+    // Adjust the cell separator inset to align with the start of the text
+    // content. The right inset aligns with the content view's trailing margin.
+    self.separatorInset =
+        UIEdgeInsetsMake(0,
+                         kTableViewHorizontalSpacing + kIconBackgroundWidth +
+                             kTableViewImagePadding,
+                         0, kContentViewTrailingMargin);
+
     [NSLayoutConstraint activateConstraints:@[
       // Icon background constraints.
       [_iconBackgroundView.leadingAnchor
diff --git a/ios/chrome/browser/first_run/ui_bundled/best_features/ui/feature_highlight_screenshot_view_controller.mm b/ios/chrome/browser/first_run/ui_bundled/best_features/ui/feature_highlight_screenshot_view_controller.mm
index 1d33b66..cf8a930 100644
--- a/ios/chrome/browser/first_run/ui_bundled/best_features/ui/feature_highlight_screenshot_view_controller.mm
+++ b/ios/chrome/browser/first_run/ui_bundled/best_features/ui/feature_highlight_screenshot_view_controller.mm
@@ -35,8 +35,7 @@
 }
 }  // namespace
 
-@interface FeatureHighlightScreenshotViewController () <
-    UINavigationControllerDelegate>
+@interface FeatureHighlightScreenshotViewController ()
 
 @end
 
@@ -88,12 +87,4 @@
   }
 }
 
-#pragma mark - UINavigationControllerDelegate
-
-- (void)navigationController:(UINavigationController*)navigationController
-      willShowViewController:(UIViewController*)viewController
-                    animated:(BOOL)animated {
-  [navigationController setNavigationBarHidden:(viewController != self)];
-}
-
 @end
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 2081bcdf..97d4aa0 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -1933,14 +1933,6 @@
      flag_descriptions::kPageContentAnnotationsDescription, flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(
          page_content_annotations::features::kPageContentAnnotations)},
-    {"page-content-annotations-persist-salient-image-metadata",
-     flag_descriptions::kPageContentAnnotationsPersistSalientImageMetadataName,
-     flag_descriptions::
-         kPageContentAnnotationsPersistSalientImageMetadataDescription,
-     flags_ui::kOsIos,
-     FEATURE_VALUE_TYPE(
-         page_content_annotations::features::
-             kPageContentAnnotationsPersistSalientImageMetadata)},
     {"page-content-annotations-remote-page-metadata",
      flag_descriptions::kPageContentAnnotationsRemotePageMetadataName,
      flag_descriptions::kPageContentAnnotationsRemotePageMetadataDescription,
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
index c407e8e..087cdd76 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -1307,11 +1307,6 @@
 const char kPageContentAnnotationsDescription[] =
     "Enables page content to be annotated on-device.";
 
-const char kPageContentAnnotationsPersistSalientImageMetadataName[] =
-    "Page content annotations - Persist salient image metadata";
-const char kPageContentAnnotationsPersistSalientImageMetadataDescription[] =
-    "Enables salient image metadata per page load to be persisted on-device.";
-
 const char kPageContentAnnotationsRemotePageMetadataName[] =
     "Page content annotations - Remote page metadata";
 const char kPageContentAnnotationsRemotePageMetadataDescription[] =
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
index 02fc2fcb..5c515673 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -779,10 +779,6 @@
 extern const char kPageContentAnnotationsName[];
 extern const char kPageContentAnnotationsDescription[];
 
-extern const char kPageContentAnnotationsPersistSalientImageMetadataName[];
-extern const char
-    kPageContentAnnotationsPersistSalientImageMetadataDescription[];
-
 extern const char kPageContentAnnotationsRemotePageMetadataName[];
 extern const char kPageContentAnnotationsRemotePageMetadataDescription[];
 
diff --git a/ios/chrome/browser/home_customization/ui/home_customization_background_preset_header_view.mm b/ios/chrome/browser/home_customization/ui/home_customization_background_preset_header_view.mm
index 3cf93d8..a064a6f1 100644
--- a/ios/chrome/browser/home_customization/ui/home_customization_background_preset_header_view.mm
+++ b/ios/chrome/browser/home_customization/ui/home_customization_background_preset_header_view.mm
@@ -10,7 +10,7 @@
 
 namespace {
 // The minimum width the text label can have.
-CGFloat kLabelMinWidth = 105.0;
+constexpr CGFloat kLabelMinWidth = 105.0;
 }  // namespace
 
 @implementation HomeCustomizationBackgroundPresetHeaderView {
diff --git a/ios/chrome/browser/intelligence/enhanced_calendar/coordinator/enhanced_calendar_mediator.mm b/ios/chrome/browser/intelligence/enhanced_calendar/coordinator/enhanced_calendar_mediator.mm
index e418c4a..fde14d34 100644
--- a/ios/chrome/browser/intelligence/enhanced_calendar/coordinator/enhanced_calendar_mediator.mm
+++ b/ios/chrome/browser/intelligence/enhanced_calendar/coordinator/enhanced_calendar_mediator.mm
@@ -18,7 +18,7 @@
 namespace {
 
 // The string template to use for parsing the end and start date/time.
-NSString* kDateTimeTemplate = @"dd/MM/yyyy HH:mm";
+NSString* const kDateTimeTemplate = @"dd/MM/yyyy HH:mm";
 
 // String template to use for adding additional information to the calendar
 // event summary.
diff --git a/ios/chrome/browser/intelligence/smart_tab_grouping/model/BUILD.gn b/ios/chrome/browser/intelligence/smart_tab_grouping/model/BUILD.gn
new file mode 100644
index 0000000..a6cacf1
--- /dev/null
+++ b/ios/chrome/browser/intelligence/smart_tab_grouping/model/BUILD.gn
@@ -0,0 +1,23 @@
+# Copyright 2025 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("model") {
+  sources = [
+    "smart_tab_grouping_service_impl.h",
+    "smart_tab_grouping_service_impl.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/optimization_guide/core",
+    "//components/optimization_guide/proto:optimization_guide_proto",
+    "//components/signin/public/identity_manager",
+    "//ios/chrome/browser/intelligence/proto_wrappers:ios_smart_tab_grouping_proto_wrapper",
+    "//ios/chrome/browser/optimization_guide/model",
+    "//ios/chrome/browser/optimization_guide/mojom",
+    "//ios/chrome/browser/shared/model/profile",
+    "//ios/chrome/browser/shared/model/web_state_list",
+    "//ios/chrome/browser/signin/model",
+    "//ios/web/public",
+  ]
+}
diff --git a/ios/chrome/browser/intelligence/smart_tab_grouping/model/DEPS b/ios/chrome/browser/intelligence/smart_tab_grouping/model/DEPS
new file mode 100644
index 0000000..62a8ff6
--- /dev/null
+++ b/ios/chrome/browser/intelligence/smart_tab_grouping/model/DEPS
@@ -0,0 +1,7 @@
+include_rules = [
+  "+ios/chrome/browser/intelligence/proto_wrappers",
+  "+ios/chrome/browser/optimization_guide/model",
+  "+ios/chrome/browser/optimization_guide/mojom",
+  "+ios/chrome/browser/signin/model/identity_manager_factory.h",
+  "+mojo/public/cpp/base/proto_wrapper.h",
+]
diff --git a/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.h b/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.h
new file mode 100644
index 0000000..a0d851b
--- /dev/null
+++ b/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.h
@@ -0,0 +1,105 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_INTELLIGENCE_SMART_TAB_GROUPING_MODEL_SMART_TAB_GROUPING_SERVICE_IMPL_H_
+#define IOS_CHROME_BROWSER_INTELLIGENCE_SMART_TAB_GROUPING_MODEL_SMART_TAB_GROUPING_SERVICE_IMPL_H_
+
+#import "base/scoped_observation.h"
+#import "components/optimization_guide/core/model_quality/model_quality_log_entry.h"
+#import "components/signin/public/identity_manager/identity_manager.h"
+#import "ios/chrome/browser/optimization_guide/mojom/smart_tab_grouping_service.mojom.h"
+#import "mojo/public/cpp/bindings/pending_receiver.h"
+#import "mojo/public/cpp/bindings/receiver.h"
+
+class OptimizationGuideService;
+class WebStateList;
+class PersistTabContextBrowserAgent;
+@class IosSmartTabGroupingRequestWrapper;
+
+namespace optimization_guide {
+struct OptimizationGuideModelExecutionResult;
+namespace proto {
+class IosSmartTabGroupingRequest;
+}  // namespace proto
+}  // namespace optimization_guide
+
+namespace ai {
+
+// Implementation of ai::mojom::SmartTabGroupingService.
+class SmartTabGroupingServiceImpl : public ai::mojom::SmartTabGroupingService,
+                                    public signin::IdentityManager::Observer {
+ public:
+  SmartTabGroupingServiceImpl(
+      mojo::PendingReceiver<ai::mojom::SmartTabGroupingService> receiver,
+      WebStateList* web_state_list,
+      PersistTabContextBrowserAgent* persist_tab_context_browser_agent);
+  ~SmartTabGroupingServiceImpl() override;
+
+  SmartTabGroupingServiceImpl(const SmartTabGroupingServiceImpl&) = delete;
+  SmartTabGroupingServiceImpl& operator=(const SmartTabGroupingServiceImpl&) =
+      delete;
+
+  // ai::mojom::SmartTabGroupingService implementation:
+  void ExecuteSmartTabGroupingRequest(
+      ExecuteSmartTabGroupingRequestCallback request_callback) override;
+
+  // signin::IdentityManager::Observer implementation.
+  void OnPrimaryAccountChanged(
+      const signin::PrimaryAccountChangeEvent& event_details) override;
+  void OnIdentityManagerShutdown(
+      signin::IdentityManager* /*unused*/ identity_manager) override;
+
+ private:
+  // Callback for the IosSmartTabGroupingRequestWrapper.
+  void OnRequestWrapperCompleted(
+      std::unique_ptr<optimization_guide::proto::IosSmartTabGroupingRequest>
+          request);
+
+  // Callback for OptimizationGuideService::ExecuteModel.
+  void OnSmartTabGroupingResponse(
+      optimization_guide::OptimizationGuideModelExecutionResult result,
+      std::unique_ptr<optimization_guide::ModelQualityLogEntry> entry);
+
+  // Invokes the pending request callback with the result.
+  void InvokePendingCallback(
+      ai::mojom::SmartTabGroupingResponseResultPtr result_union);
+
+  // Helper function to cancel pending operations and notify the caller.
+  void CancelPendingRequest(const std::string& error_message);
+
+  // Optimization Guide service to execute genAI queries.
+  const raw_ref<OptimizationGuideService> optimization_guide_service_;
+
+  // Receiver throughout the SmartTabGroupingService lifecycle.
+  mojo::Receiver<ai::mojom::SmartTabGroupingService>
+      smart_tab_grouping_receiver_;
+
+  // Callback for the current request, cleared once invoked.
+  ExecuteSmartTabGroupingRequestCallback pending_request_callback_;
+
+  // The list of WebStates for the current browser.
+  const raw_ref<WebStateList> web_state_list_;
+
+  // The agent responsible for persisting and restoring tab context.
+  raw_ptr<PersistTabContextBrowserAgent> persist_tab_context_browser_agent_;
+
+  // Pointer to the Objective-C request wrapper.
+  __strong IosSmartTabGroupingRequestWrapper*
+      smart_tab_grouping_request_wrapper_ = nil;
+
+  // Observer for `IdentityManager`.
+  base::ScopedObservation<signin::IdentityManager,
+                          signin::IdentityManager::Observer>
+      identity_manager_observation_{this};
+
+  // The identity manager that this instance uses.
+  const raw_ref<signin::IdentityManager> identity_manager_;
+
+  // Weak pointer factory.
+  base::WeakPtrFactory<SmartTabGroupingServiceImpl> weak_ptr_factory_{this};
+};
+
+}  // namespace ai
+
+#endif  // IOS_CHROME_BROWSER_INTELLIGENCE_SMART_TAB_GROUPING_MODEL_SMART_TAB_GROUPING_SERVICE_IMPL_H_
diff --git a/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.mm b/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.mm
new file mode 100644
index 0000000..afed4d3f
--- /dev/null
+++ b/ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.mm
@@ -0,0 +1,180 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/intelligence/smart_tab_grouping/model/smart_tab_grouping_service_impl.h"
+
+#import <utility>
+
+#import "base/functional/bind.h"
+#import "base/time/time.h"
+#import "components/optimization_guide/core/model_execution/feature_keys.h"
+#import "components/optimization_guide/core/optimization_guide_util.h"
+#import "components/optimization_guide/proto/features/ios_smart_tab_grouping.pb.h"
+#import "ios/chrome/browser/intelligence/proto_wrappers/ios_smart_tab_grouping_request_wrapper.h"
+#import "ios/chrome/browser/optimization_guide/model/optimization_guide_service.h"
+#import "ios/chrome/browser/optimization_guide/model/optimization_guide_service_factory.h"
+#import "ios/chrome/browser/shared/model/profile/profile_ios.h"
+#import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h"
+#import "ios/chrome/browser/signin/model/identity_manager_factory.h"
+#import "ios/web/public/web_state.h"
+#import "mojo/public/cpp/base/proto_wrapper.h"
+
+// TODO(crbug.com/459432095): Evaluate and set an appropriate timeout for Smart
+// Tab Grouping.
+const base::TimeDelta kSmartTabGroupingRequestTimeout = base::Seconds(15);
+
+namespace ai {
+
+SmartTabGroupingServiceImpl::SmartTabGroupingServiceImpl(
+    mojo::PendingReceiver<ai::mojom::SmartTabGroupingService> receiver,
+    WebStateList* web_state_list,
+    PersistTabContextBrowserAgent* persist_tab_context_browser_agent)
+    : optimization_guide_service_(
+          *OptimizationGuideServiceFactory::GetForProfile(
+              ProfileIOS::FromBrowserState(
+                  web_state_list->GetActiveWebState()->GetBrowserState()))),
+      smart_tab_grouping_receiver_(this, std::move(receiver)),
+      web_state_list_(*web_state_list),
+      persist_tab_context_browser_agent_(persist_tab_context_browser_agent),
+      identity_manager_(
+          *IdentityManagerFactory::GetForProfile(ProfileIOS::FromBrowserState(
+              web_state_list->GetActiveWebState()->GetBrowserState()))) {
+  identity_manager_observation_.Observe(&identity_manager_.get());
+}
+
+SmartTabGroupingServiceImpl::~SmartTabGroupingServiceImpl() {
+  if (identity_manager_observation_.IsObserving()) {
+    identity_manager_observation_.Reset();
+  }
+
+  // Cancel any in-flight requests and clean up.
+  CancelPendingRequest("Service shutting down");
+}
+
+void SmartTabGroupingServiceImpl::ExecuteSmartTabGroupingRequest(
+    ExecuteSmartTabGroupingRequestCallback request_callback) {
+  if (pending_request_callback_) {
+    CancelPendingRequest(
+        "Request superseded by a new smart tab grouping request.");
+  }
+  pending_request_callback_ = std::move(request_callback);
+
+  if (web_state_list_->empty()) {
+    CancelPendingRequest("WebStateList empty");
+    return;
+  }
+
+  if (smart_tab_grouping_request_wrapper_) {
+    smart_tab_grouping_request_wrapper_ = nil;
+  }
+
+  base::OnceCallback<void(
+      std::unique_ptr<optimization_guide::proto::IosSmartTabGroupingRequest>)>
+      wrapper_completion_callback = base::BindOnce(
+          &SmartTabGroupingServiceImpl::OnRequestWrapperCompleted,
+          weak_ptr_factory_.GetWeakPtr());
+
+  // Instantiate and start the new wrapper to build the proto asynchronously.
+  smart_tab_grouping_request_wrapper_ =
+      [[IosSmartTabGroupingRequestWrapper alloc]
+                   initWithWebStateList:&web_state_list_.get()
+          persistTabContextBrowserAgent:persist_tab_context_browser_agent_
+                     completionCallback:std::move(wrapper_completion_callback)];
+
+  if (persist_tab_context_browser_agent_) {
+    [smart_tab_grouping_request_wrapper_
+        populateRequestFieldsAsyncFromPersistence];
+  } else {
+    [smart_tab_grouping_request_wrapper_
+        populateRequestFieldsAsyncFromWebStates];
+  }
+}
+
+void SmartTabGroupingServiceImpl::OnRequestWrapperCompleted(
+    std::unique_ptr<optimization_guide::proto::IosSmartTabGroupingRequest>
+        request) {
+  smart_tab_grouping_request_wrapper_ = nil;
+
+  if (!request) {
+    InvokePendingCallback(ai::mojom::SmartTabGroupingResponseResult::NewError(
+        "Failed to populate request proto"));
+    return;
+  }
+
+  optimization_guide_service_->ExecuteModel(
+      optimization_guide::ModelBasedCapabilityKey::kIosSmartTabGrouping,
+      std::move(*request), kSmartTabGroupingRequestTimeout,
+      base::BindOnce(&SmartTabGroupingServiceImpl::OnSmartTabGroupingResponse,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void SmartTabGroupingServiceImpl::OnSmartTabGroupingResponse(
+    optimization_guide::OptimizationGuideModelExecutionResult result,
+    std::unique_ptr<optimization_guide::ModelQualityLogEntry> entry) {
+  if (!pending_request_callback_) {
+    return;
+  }
+
+  ai::mojom::SmartTabGroupingResponseResultPtr result_union;
+
+  if (result.response.has_value()) {
+    std::optional<optimization_guide::proto::IosSmartTabGroupingResponse>
+        response_proto = optimization_guide::ParsedAnyMetadata<
+            optimization_guide::proto::IosSmartTabGroupingResponse>(
+            result.response.value());
+
+    if (response_proto.has_value()) {
+      result_union = ai::mojom::SmartTabGroupingResponseResult::NewResponse(
+          mojo_base::ProtoWrapper(response_proto.value()));
+    } else {
+      result_union = ai::mojom::SmartTabGroupingResponseResult::NewError(
+          "Proto unmarshalling error");
+    }
+  } else {
+    std::string error_string =
+        base::StrCat({"Server Model Execution Error: ",
+                      optimization_guide_service_->ResponseForErrorCode(
+                          static_cast<int>(result.response.error().error()))});
+    result_union =
+        ai::mojom::SmartTabGroupingResponseResult::NewError(error_string);
+  }
+
+  InvokePendingCallback(std::move(result_union));
+}
+
+void SmartTabGroupingServiceImpl::InvokePendingCallback(
+    ai::mojom::SmartTabGroupingResponseResultPtr result_union) {
+  CHECK(pending_request_callback_);
+  std::move(pending_request_callback_).Run(std::move(result_union));
+}
+
+void SmartTabGroupingServiceImpl::CancelPendingRequest(
+    const std::string& error_message) {
+  weak_ptr_factory_.InvalidateWeakPtrs();
+  smart_tab_grouping_request_wrapper_ = nil;
+
+  if (!pending_request_callback_) {
+    return;
+  }
+
+  // Inform the caller of the error.
+  ai::mojom::SmartTabGroupingResponseResultPtr result_union =
+      ai::mojom::SmartTabGroupingResponseResult::NewError(error_message);
+  InvokePendingCallback(std::move(result_union));
+}
+
+#pragma mark - IdentityManagerObserverBridgeDelegate
+
+void SmartTabGroupingServiceImpl::OnPrimaryAccountChanged(
+    const signin::PrimaryAccountChangeEvent& event_details) {
+  CancelPendingRequest("Primary account was changed.");
+}
+
+void SmartTabGroupingServiceImpl::OnIdentityManagerShutdown(
+    signin::IdentityManager* /*unused*/ identity_manager) {
+  identity_manager_observation_.Reset();
+  CancelPendingRequest("IdentityManager shutdown.");
+}
+
+}  // namespace ai
diff --git a/ios/chrome/browser/location_bar/badge/coordinator/location_bar_badge_mediator_unittest.mm b/ios/chrome/browser/location_bar/badge/coordinator/location_bar_badge_mediator_unittest.mm
index cff7f05e..2f0abfe5 100644
--- a/ios/chrome/browser/location_bar/badge/coordinator/location_bar_badge_mediator_unittest.mm
+++ b/ios/chrome/browser/location_bar/badge/coordinator/location_bar_badge_mediator_unittest.mm
@@ -49,7 +49,7 @@
 #import "third_party/ocmock/gtest_support.h"
 
 namespace {
-NSString* kTestAccessibilityLabel = @"testBadge";
+NSString* const kTestAccessibilityLabel = @"testBadge";
 }
 
 namespace {
diff --git a/ios/chrome/browser/mini_map/model/mini_map_tab_helper_unittest.mm b/ios/chrome/browser/mini_map/model/mini_map_tab_helper_unittest.mm
index 0dde5aa..eb1648b 100644
--- a/ios/chrome/browser/mini_map/model/mini_map_tab_helper_unittest.mm
+++ b/ios/chrome/browser/mini_map/model/mini_map_tab_helper_unittest.mm
@@ -39,14 +39,14 @@
     "https://www.example.com/?q={searchTerms}";
 
 // A link to Google SRP.
-NSString* kGoogleSRPPage = @"https://www.google.com/search?q=foo";
+NSString* const kGoogleSRPPage = @"https://www.google.com/search?q=foo";
 
 // A UL to Maps.
-NSString* kMapsLink = @"https://maps.google.com/maps/foo";
+NSString* const kMapsLink = @"https://maps.google.com/maps/foo";
 
 // A valid query parameter to mark URL valid for
 // MiniMapTabHelperTestMiniMapControllerFactory.
-NSString* kValidQuery = @"valid=true";
+NSString* const kValidQuery = @"valid=true";
 }  // namespace
 
 // A Mini map factory that filters out some handled URLs based on their queries.
diff --git a/ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view.mm b/ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view.mm
index 7ccbdf56..697ba76 100644
--- a/ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view.mm
+++ b/ios/chrome/browser/ntp/ui_bundled/incognito/incognito_view.mm
@@ -28,7 +28,7 @@
 const CGFloat kLayoutGuideMinHeight = 12.0;
 
 // The size of the incognito symbol image.
-NSInteger kIncognitoSymbolImagePointSize = 72;
+constexpr NSInteger kIncognitoSymbolImagePointSize = 72;
 
 // Returns a font, scaled to the current dynamic type settings, that is suitable
 // for the title of the incognito page.
diff --git a/ios/chrome/browser/omnibox/coordinator/popup/DEPS b/ios/chrome/browser/omnibox/coordinator/popup/DEPS
index daa56be..f4b7aa41 100644
--- a/ios/chrome/browser/omnibox/coordinator/popup/DEPS
+++ b/ios/chrome/browser/omnibox/coordinator/popup/DEPS
@@ -3,6 +3,5 @@
   "+ios/chrome/browser/menu/ui_bundled",
   "+ios/chrome/browser/sharing/ui_bundled",
   "+ios/chrome/browser/toolbar/ui_bundled/buttons",
-  "+ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h",
   "+third_party/omnibox_proto",
 ]
diff --git a/ios/chrome/browser/omnibox/eg_tests/omnibox_popup_pedal_egtest.mm b/ios/chrome/browser/omnibox/eg_tests/omnibox_popup_pedal_egtest.mm
index 010e1bc..3e396e4 100644
--- a/ios/chrome/browser/omnibox/eg_tests/omnibox_popup_pedal_egtest.mm
+++ b/ios/chrome/browser/omnibox/eg_tests/omnibox_popup_pedal_egtest.mm
@@ -21,8 +21,8 @@
 
 namespace {
 
-NSString* kDinoPedalString = @"chrome://dino";
-NSString* kDinoSearchString = @"dino game";
+NSString* const kDinoPedalString = @"chrome://dino";
+NSString* const kDinoSearchString = @"dino game";
 
 }  // namespace
 
diff --git a/ios/chrome/browser/omnibox/model/omnibox_autocomplete_controller.mm b/ios/chrome/browser/omnibox/model/omnibox_autocomplete_controller.mm
index 6c16a0d0..4ded0b20 100644
--- a/ios/chrome/browser/omnibox/model/omnibox_autocomplete_controller.mm
+++ b/ios/chrome/browser/omnibox/model/omnibox_autocomplete_controller.mm
@@ -21,6 +21,7 @@
 #import "components/omnibox/browser/autocomplete_result.h"
 #import "components/omnibox/browser/clipboard_provider.h"
 #import "components/omnibox/browser/history_url_provider.h"
+#import "components/omnibox/browser/lens_suggest_inputs_utils.h"
 #import "components/omnibox/browser/omnibox_client.h"
 #import "components/omnibox/browser/omnibox_popup_selection.h"
 #import "components/omnibox/browser/omnibox_pref_names.h"
@@ -431,10 +432,7 @@
   input.set_current_url(_omniboxClient->GetURL());
   input.set_current_title(_omniboxClient->GetTitle());
   input.set_prevent_inline_autocomplete(preventInlineAutocomplete);
-  if (std::optional<lens::proto::LensOverlaySuggestInputs> suggestInputs =
-          _omniboxClient->GetLensOverlaySuggestInputs()) {
-    input.set_lens_overlay_suggest_inputs(*suggestInputs);
-  }
+  [self attachSuggestInputsToAutocompleteInput:input];
 
   [self startAutocompleteWithInput:input];
 }
@@ -479,11 +477,8 @@
   input.set_current_url(_omniboxClient->GetURL());
   input.set_current_title(_omniboxClient->GetTitle());
   input.set_focus_type(metrics::OmniboxFocusType::INTERACTION_FOCUS);
-  // Set the lens overlay suggest inputs, if available.
-  if (std::optional<lens::proto::LensOverlaySuggestInputs> suggestInputs =
-          _omniboxClient->GetLensOverlaySuggestInputs()) {
-    input.set_lens_overlay_suggest_inputs(*suggestInputs);
-  }
+  [self attachSuggestInputsToAutocompleteInput:input];
+
   [self startAutocompleteWithInput:input];
 }
 
@@ -591,6 +586,24 @@
 
 #pragma mark - Private
 
+/// Attaches the client's suggest inputs if valid.
+- (void)attachSuggestInputsToAutocompleteInput:(AutocompleteInput&)input {
+  std::optional<lens::proto::LensOverlaySuggestInputs> suggestInputs =
+      _omniboxClient->GetLensOverlaySuggestInputs();
+
+  if (!suggestInputs) {
+    return;
+  }
+
+  if ((_omniboxPresentationContext ==
+       OmniboxPresentationContext::kComposebox) &&
+      !AreLensSuggestInputsReady(suggestInputs)) {
+    return;
+  }
+
+  input.set_lens_overlay_suggest_inputs(*suggestInputs);
+}
+
 /// Wraps the suggestions and send them to the delegate.
 - (void)updateWithSortedResults:(const AutocompleteResult&)results {
   NSArray<id<AutocompleteSuggestionGroup>>* suggestionGroups =
diff --git a/ios/chrome/browser/omnibox/ui/popup/DEPS b/ios/chrome/browser/omnibox/ui/popup/DEPS
index 3972b9e..6f56e22 100644
--- a/ios/chrome/browser/omnibox/ui/popup/DEPS
+++ b/ios/chrome/browser/omnibox/ui/popup/DEPS
@@ -3,5 +3,4 @@
   "+ios/chrome/browser/menu/ui_bundled",
   "+ios/chrome/browser/sharing/ui_bundled",
   "+ios/chrome/browser/toolbar/ui_bundled/buttons",
-  "+ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h",
 ]
diff --git a/ios/chrome/browser/omnibox/ui/popup/omnibox_popup_view_controller.mm b/ios/chrome/browser/omnibox/ui/popup/omnibox_popup_view_controller.mm
index 188be75..916b44e 100644
--- a/ios/chrome/browser/omnibox/ui/popup/omnibox_popup_view_controller.mm
+++ b/ios/chrome/browser/omnibox/ui/popup/omnibox_popup_view_controller.mm
@@ -9,7 +9,6 @@
 #import "base/logging.h"
 #import "components/favicon/core/large_icon_service.h"
 #import "components/omnibox/common/omnibox_features.h"
-#import "ios/chrome/browser/content_suggestions/ui_bundled/cells/content_suggestions_tile_layout_util.h"
 #import "ios/chrome/browser/favicon/ui_bundled/favicon_attributes_provider.h"
 #import "ios/chrome/browser/favicon/ui_bundled/favicon_attributes_with_payload.h"
 #import "ios/chrome/browser/net/model/crurl.h"
diff --git a/ios/chrome/browser/optimization_guide/mojom/BUILD.gn b/ios/chrome/browser/optimization_guide/mojom/BUILD.gn
index f26d270..63f26c82 100644
--- a/ios/chrome/browser/optimization_guide/mojom/BUILD.gn
+++ b/ios/chrome/browser/optimization_guide/mojom/BUILD.gn
@@ -8,6 +8,7 @@
   sources = [
     "ai_prototyping_service.mojom",
     "enhanced_calendar_service.mojom",
+    "smart_tab_grouping_service.mojom",
     "tab_organization_service.mojom",
     "zero_state_suggestions_service.mojom",
   ]
diff --git a/ios/chrome/browser/optimization_guide/mojom/smart_tab_grouping_service.mojom b/ios/chrome/browser/optimization_guide/mojom/smart_tab_grouping_service.mojom
new file mode 100644
index 0000000..fd4bfe1
--- /dev/null
+++ b/ios/chrome/browser/optimization_guide/mojom/smart_tab_grouping_service.mojom
@@ -0,0 +1,21 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module ai.mojom;
+
+import "mojo/public/mojom/base/proto_wrapper.mojom";
+
+// Result of the Smart Tab Grouping execution.
+union SmartTabGroupingResponseResult {
+  string error;
+  mojo_base.mojom.ProtoWrapper response;
+};
+
+// Used to bridge a mojo service and execute query requests related
+// to the smart tab grouping feature.
+interface SmartTabGroupingService {
+  // Executes the Smart Tab Grouping request.
+  ExecuteSmartTabGroupingRequest() =>
+    (SmartTabGroupingResponseResult result);
+};
diff --git a/ios/chrome/browser/overlays/ui_bundled/infobar_banner/tailored_security/tailored_security_infobar_banner_overlay_mediator_unittest.mm b/ios/chrome/browser/overlays/ui_bundled/infobar_banner/tailored_security/tailored_security_infobar_banner_overlay_mediator_unittest.mm
index d1073ee..4061eec 100644
--- a/ios/chrome/browser/overlays/ui_bundled/infobar_banner/tailored_security/tailored_security_infobar_banner_overlay_mediator_unittest.mm
+++ b/ios/chrome/browser/overlays/ui_bundled/infobar_banner/tailored_security/tailored_security_infobar_banner_overlay_mediator_unittest.mm
@@ -18,7 +18,7 @@
 namespace {
 
 // The size of the symbol image.
-CGFloat kSymbolImagePointSize = 18.;
+constexpr CGFloat kSymbolImagePointSize = 18.;
 
 // Returns the branded version of the Google shield symbol.
 UIImage* GetBrandedGoogleShieldSymbol() {
diff --git a/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm b/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm
index ccebde8..0affce7c 100644
--- a/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm
+++ b/ios/chrome/browser/overlays/ui_bundled/infobar_modal/save_card/save_card_infobar_modal_overlay_mediator_unittest.mm
@@ -49,9 +49,9 @@
 
 // Details of the card to be saved.
 constexpr NSString* kCardHolderName = @"Name";
-NSString* kValidExpirationMonth =
+NSString* const kValidExpirationMonth =
     base::SysUTF8ToNSString(autofill::test::NextMonth());
-NSString* kValidExpirationYear =
+NSString* const kValidExpirationYear =
     base::SysUTF8ToNSString(autofill::test::NextYear());
 
 constexpr NSString* kCardCvc = @"123";
diff --git a/ios/chrome/browser/partial_translate/ui_bundled/partial_translate_mediator_unittest.mm b/ios/chrome/browser/partial_translate/ui_bundled/partial_translate_mediator_unittest.mm
index aac041a4..aef8b71 100644
--- a/ios/chrome/browser/partial_translate/ui_bundled/partial_translate_mediator_unittest.mm
+++ b/ios/chrome/browser/partial_translate/ui_bundled/partial_translate_mediator_unittest.mm
@@ -38,7 +38,7 @@
 
 // A template for an HTML page containing a selection.
 // "TEMPLATE_SELECTION" can be replaced by a custom text depending on the test.
-NSString* kPageHTMLTemplate =
+NSString* const kPageHTMLTemplate =
     @"<html>"
      "  <body>"
      "    This text contains a <span id='selectid'>TEMPLATE_SELECTION</span>."
diff --git a/ios/chrome/browser/passwords/model/BUILD.gn b/ios/chrome/browser/passwords/model/BUILD.gn
index db5a81d..fc776ea 100644
--- a/ios/chrome/browser/passwords/model/BUILD.gn
+++ b/ios/chrome/browser/passwords/model/BUILD.gn
@@ -80,6 +80,8 @@
     "//components/translate/core/browser",
     "//components/ukm",
     "//components/ukm/ios:ukm_url_recorder",
+    "//components/webauthn/ios",
+    "//components/webauthn/ios:features",
     "//google_apis",
     "//ios/chrome/app:tests_hook",
     "//ios/chrome/app/strings",
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h
index f9ab58d..60ebe7c 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.h
@@ -155,6 +155,9 @@
   void UpdateFormManagers() override;
   bool IsIsolationForPasswordSitesEnabled() const override;
   bool IsNewTabPage() const override;
+  password_manager::WebAuthnCredentialsDelegate*
+  GetWebAuthnCredentialsDelegateForDriver(
+      password_manager::PasswordManagerDriver* driver) override;
   safe_browsing::PasswordProtectionService* GetPasswordProtectionService()
       const override;
   autofill::AutofillCrowdsourcingManager* GetAutofillCrowdsourcingManager()
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm
index 77ebcf27..7b0d82f0 100644
--- a/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm
+++ b/ios/chrome/browser/passwords/model/ios_chrome_password_manager_client.mm
@@ -29,10 +29,13 @@
 #import "components/password_manager/core/browser/password_requirements_service.h"
 #import "components/password_manager/core/browser/password_sync_util.h"
 #import "components/password_manager/core/common/password_manager_pref_names.h"
+#import "components/password_manager/ios/ios_password_manager_driver.h"
 #import "components/password_manager/ios/password_manager_ios_util.h"
 #import "components/sync/service/sync_service.h"
 #import "components/translate/core/browser/translate_manager.h"
 #import "components/ukm/ios/ukm_url_recorder.h"
+#import "components/webauthn/ios/features.h"
+#import "components/webauthn/ios/ios_webauthn_credentials_delegate_factory.h"
 #import "ios/chrome/browser/enterprise/connectors/reporting/ios_reporting_event_router_factory.h"
 #import "ios/chrome/browser/passwords/model/features.h"
 #import "ios/chrome/browser/passwords/model/ios_chrome_account_password_store_factory.h"
@@ -389,6 +392,18 @@
   return false;
 }
 
+password_manager::WebAuthnCredentialsDelegate*
+IOSChromePasswordManagerClient::GetWebAuthnCredentialsDelegateForDriver(
+    password_manager::PasswordManagerDriver* driver) {
+  if (!base::FeatureList::IsEnabled(kIOSPasskeyModalLoginWithShim)) {
+    return nullptr;
+  }
+
+  return IOSWebAuthnCredentialsDelegateFactory::GetFactory(bridge_.webState)
+      ->GetDelegateForFrame(
+          static_cast<IOSPasswordManagerDriver*>(driver)->web_frame_id());
+}
+
 safe_browsing::PasswordProtectionService*
 IOSChromePasswordManagerClient::GetPasswordProtectionService() const {
   return ChromePasswordProtectionServiceFactory::GetForProfile(bridge_.profile);
diff --git a/ios/chrome/browser/passwords/model/password_controller_egtest.mm b/ios/chrome/browser/passwords/model/password_controller_egtest.mm
index c3c0d7dd..bd9fc7d 100644
--- a/ios/chrome/browser/passwords/model/password_controller_egtest.mm
+++ b/ios/chrome/browser/passwords/model/password_controller_egtest.mm
@@ -140,15 +140,19 @@
 
 // Types `text` on an input field with `fieldID`. Dismisses the credential
 // bottom sheet if `dismissBottomSheet` is true.
-void TypeTextOnField(NSString* text,
-                     const std::string& fieldID,
-                     bool dismissBottomSheet = false) {
-  [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
-      performAction:chrome_test_util::TapWebElementWithId(fieldID)];
-  if (dismissBottomSheet) {
-    WaitForBottomSheetAndOpenKeyboard(text);
-  }
+void TypeTextOnField(NSString* text, const std::string& fieldID) {
+  [ChromeEarlGrey
+      evaluateJavaScriptForSideEffect:
+          [NSString stringWithFormat:@"document.getElementById('%@').focus();",
+                                     base::SysUTF8ToNSString(fieldID)]];
   TypeText(text);
+  // Wait for the current input field to contain the `text` (i.e. typing from
+  // SimulatePhysicalKeyboardEvent finished) before proceeding to next step.
+  [ChromeEarlGrey
+      waitForJavaScriptCondition:
+          [NSString stringWithFormat:
+                        @"document.getElementById('%@').value.includes('%@');",
+                        base::SysUTF8ToNSString(fieldID), text]];
 }
 
 // Types the username and password on the UFF forms.
@@ -159,7 +163,12 @@
   // field to be focused on, which triggers the credential bottom sheet. Once
   // dismissed the bottom sheet isn't shown again when focusing on other login
   // fields, as long as the page isn't reloaded.
-  TypeTextOnField(username, "single_un", dismissBottomSheetOnUsername);
+  if (dismissBottomSheetOnUsername) {
+    [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
+        performAction:chrome_test_util::TapWebElementWithId("single_un")];
+    WaitForBottomSheetAndOpenKeyboard(username);
+  }
+  TypeTextOnField(username, "single_un");
   TypeTextOnField(password, "single_pw");
 }
 
@@ -844,8 +853,7 @@
   // Simulate login.
   TypeTextOnField(@"test-username@test-domain.com", kFormUsername);
   TypeTextOnField(@"test-password", kFormPassword);
-  [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
-      performAction:chrome_test_util::TapWebElementWithId("submit_button")];
+  [ChromeEarlGrey tapWebStateElementWithID:@"submit_button"];
 
   // Wait for report to upload.
   [self waitForEnterpriseReports:1];
diff --git a/ios/chrome/browser/price_insights/ui/price_insights_cell_unittest.mm b/ios/chrome/browser/price_insights/ui/price_insights_cell_unittest.mm
index a2b46d5..935c4382 100644
--- a/ios/chrome/browser/price_insights/ui/price_insights_cell_unittest.mm
+++ b/ios/chrome/browser/price_insights/ui/price_insights_cell_unittest.mm
@@ -20,8 +20,8 @@
 
 const char kUrl[] = "https://www.merchant.com/price_drop_product";
 
-NSString* kTitle = @"Product title";
-NSString* kVariant = @"Product variant";
+NSString* const kTitle = @"Product title";
+NSString* const kVariant = @"Product variant";
 std::string kCurrency = "USD";
 std::string kCountryCode = "us";
 
diff --git a/ios/chrome/browser/price_notifications/ui_bundled/cells/price_notifications_table_view_item.mm b/ios/chrome/browser/price_notifications/ui_bundled/cells/price_notifications_table_view_item.mm
index b3686b3e..9f81c218 100644
--- a/ios/chrome/browser/price_notifications/ui_bundled/cells/price_notifications_table_view_item.mm
+++ b/ios/chrome/browser/price_notifications/ui_bundled/cells/price_notifications_table_view_item.mm
@@ -41,7 +41,7 @@
 const CGFloat kTrackButtonPlaceholderHeight = 28;
 const CGFloat kTrackButtonPlaceholderWidth = 70;
 // Identifier for the stop price tracking action item.
-NSString* kActionMenuIdentifier = @"priceTrackingActionMenu";
+NSString* const kActionMenuIdentifier = @"priceTrackingActionMenu";
 
 // A container for the UIView elements that will be added to the UIStackView.
 struct TableViewItemStackContent {
diff --git a/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm b/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm
index 24779a3..68cdc578 100644
--- a/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm
+++ b/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm
@@ -49,9 +49,9 @@
 
 NSString* const kReadTitle = @"foobar";
 NSString* const kReadURL = @"http://readfoobar.com";
-NSString* kPage1Title = @"Page 1 Title";
+NSString* const kPage1Title = @"Page 1 Title";
 const char kPage1URL[] = "/page1";
-NSString* kPage2Title = @"Page 2 Title";
+NSString* const kPage2Title = @"Page 2 Title";
 const char kPage2URL[] = "/page2";
 constexpr base::TimeDelta kLongPressDuration = base::Seconds(1);
 constexpr base::TimeDelta kSyncActiveTimeout = base::Seconds(5);
diff --git a/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm b/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm
index ea4de76e9..c379dbc 100644
--- a/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm
+++ b/ios/chrome/browser/safe_browsing/model/safe_browsing_egtest.mm
@@ -82,10 +82,10 @@
 
 // Error message logged when the wrong number of Enterprise Reports were
 // received.
-NSString* kWrongNumberOfReportsErrorMessage = @"Wrong number of reports.";
+NSString* const kWrongNumberOfReportsErrorMessage = @"Wrong number of reports.";
 
 // Id of the primary button in the security interstitial pages.
-NSString* kPrimaryButtonID = @"primary-button";
+NSString* const kPrimaryButtonID = @"primary-button";
 
 // Duration to wait for an enterprise security event report.
 constexpr base::TimeDelta kReportUploadTimeout = base::Seconds(15);
diff --git a/ios/chrome/browser/search_engines/model/search_engine_js_unittest.mm b/ios/chrome/browser/search_engines/model/search_engine_js_unittest.mm
index ae1621b..024464d 100644
--- a/ios/chrome/browser/search_engines/model/search_engine_js_unittest.mm
+++ b/ios/chrome/browser/search_engines/model/search_engine_js_unittest.mm
@@ -29,7 +29,7 @@
 // This is for cases where no message should be sent back from Js.
 constexpr base::TimeDelta kWaitForJsNotReturnTimeout = base::Milliseconds(500);
 
-NSString* kSearchableForm =
+NSString* const kSearchableForm =
     @"<html>"
     @"  <form id='f' action='index.html' method='get'>"
     @"    <input type='search' name='q'>"
diff --git a/ios/chrome/browser/send_tab_to_self/model/ios_send_tab_to_self_infobar_delegate.mm b/ios/chrome/browser/send_tab_to_self/model/ios_send_tab_to_self_infobar_delegate.mm
index 49c7b579..b88e72d 100644
--- a/ios/chrome/browser/send_tab_to_self/model/ios_send_tab_to_self_infobar_delegate.mm
+++ b/ios/chrome/browser/send_tab_to_self/model/ios_send_tab_to_self_infobar_delegate.mm
@@ -20,7 +20,7 @@
 
 namespace {
 
-NSString* kSendTabToSendConclusionNotification =
+NSString* const kSendTabToSendConclusionNotification =
     @"SendTabToSendConclusionNotification";
 
 }  // namespace
diff --git a/ios/chrome/browser/send_tab_to_self/ui/send_tab_to_self_table_view_controller.mm b/ios/chrome/browser/send_tab_to_self/ui/send_tab_to_self_table_view_controller.mm
index 1c81a9e..1b2ed95 100644
--- a/ios/chrome/browser/send_tab_to_self/ui/send_tab_to_self_table_view_controller.mm
+++ b/ios/chrome/browser/send_tab_to_self/ui/send_tab_to_self_table_view_controller.mm
@@ -41,7 +41,7 @@
 NSString* const kSendTabToSelfModalSendButton =
     @"kSendTabToSelfModalSendButton";
 
-CGFloat kSymbolSize = 22;
+constexpr CGFloat kSymbolSize = 22;
 
 }  // namespace
 
diff --git a/ios/chrome/browser/settings/ui_bundled/content_settings/block_popups_egtest.mm b/ios/chrome/browser/settings/ui_bundled/content_settings/block_popups_egtest.mm
index d54452f..91d63916 100644
--- a/ios/chrome/browser/settings/ui_bundled/content_settings/block_popups_egtest.mm
+++ b/ios/chrome/browser/settings/ui_bundled/content_settings/block_popups_egtest.mm
@@ -36,13 +36,14 @@
 const char* kOpenedWindowUrl = "http://openedwindow";
 
 // Page with a button that opens a new window after a short delay.
-NSString* kBlockPopupsResponseTemplate =
+NSString* const kBlockPopupsResponseTemplate =
     @"<input type=\"button\" onclick=\"setTimeout(function() {"
      "window.open('%@')}, 1)\" "
      "id=\"open-window\" "
      "value=\"openWindow\">";
 // JavaScript that clicks that button.
-NSString* kOpenPopupScript = @"document.getElementById('open-window').click()";
+NSString* const kOpenPopupScript =
+    @"document.getElementById('open-window').click()";
 const std::string kOpenedWindowResponse = "Opened window";
 
 // Returns matcher for the block popups settings menu button.
diff --git a/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller.mm
index b8d7919..90ad3373 100644
--- a/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller.mm
+++ b/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller.mm
@@ -39,7 +39,7 @@
 BOOL openedMailTo = NO;
 
 // Notification name of changes to openedMailTo state.
-NSString* kMailToInstanceChanged = @"MailToInstanceChanged";
+NSString* const kMailToInstanceChanged = @"MailToInstanceChanged";
 
 typedef NS_ENUM(NSInteger, SectionIdentifier) {
   SectionIdentifierSettings = kSectionIdentifierEnumZero,
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm
index 20d79ef4..32f37a5 100644
--- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm
+++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm
@@ -25,12 +25,12 @@
 namespace {
 
 // Table view customized header heights.
-CGFloat kAdvancedSettingsSectionHeaderHeightPointSize = 26.;
-CGFloat kSignOutSectionHeaderHeightPointSize = 26.;
-CGFloat kDefaultSectionHeaderHeightPointSize = 10.;
+constexpr CGFloat kAdvancedSettingsSectionHeaderHeightPointSize = 26.;
+constexpr CGFloat kSignOutSectionHeaderHeightPointSize = 26.;
+constexpr CGFloat kDefaultSectionHeaderHeightPointSize = 10.;
 
 // Table view customized footer heights.
-CGFloat kDefaultSectionFooterHeightPointSize = 10.;
+constexpr CGFloat kDefaultSectionFooterHeightPointSize = 10.;
 
 }  // namespace
 
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_details/password_details_table_view_controller_unittest.mm b/ios/chrome/browser/settings/ui_bundled/password/password_details/password_details_table_view_controller_unittest.mm
index b3bb0fd..22f2b65 100644
--- a/ios/chrome/browser/settings/ui_bundled/password/password_details/password_details_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/settings/ui_bundled/password/password_details/password_details_table_view_controller_unittest.mm
@@ -877,17 +877,20 @@
       PasskeyCredential::Source::kGooglePasswordManager;
   PasskeyCredential::RpId rp_id("www.example.com");
   base::Time creation_time = base::Time::Now();
+  base::Time last_used_time = base::Time::Now();
   PasskeyCredential hidden_passkey_credential(
       source, rp_id, PasskeyCredential::CredentialId({'c', 'r', 'e', 'd', '1'}),
       PasskeyCredential::UserId({'u', 's', 'e', 'r', '1'}),
       PasskeyCredential::Username("username1"),
       PasskeyCredential::DisplayName("display_name1"), creation_time,
+      last_used_time,
       /*hidden=*/true);
   PasskeyCredential passkey_credential(
       source, rp_id, PasskeyCredential::CredentialId({'c', 'r', 'e', 'd', '2'}),
       PasskeyCredential::UserId({'u', 's', 'e', 'r', '2'}),
       PasskeyCredential::Username("username2"),
       PasskeyCredential::DisplayName("display_name2"), creation_time,
+      last_used_time,
       /*hidden=*/false);
 
   NSArray<CredentialDetails*>* passkeys = @[
diff --git a/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_mediator.mm b/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_mediator.mm
index 64205a5..b457fdc 100644
--- a/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_mediator.mm
+++ b/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_mediator.mm
@@ -42,7 +42,7 @@
 namespace {
 
 // The size of the symbol image.
-CGFloat kSymbolImagePointSize = 17.;
+constexpr CGFloat kSymbolImagePointSize = 17.;
 
 // List of item types.
 typedef NS_ENUM(NSInteger, ItemType) {
diff --git a/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_mediator_unittest.mm b/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_mediator_unittest.mm
index 13cd44e7..48027db 100644
--- a/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_mediator_unittest.mm
+++ b/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_mediator_unittest.mm
@@ -77,7 +77,7 @@
 using password_manager::TestPasswordStore;
 
 // The size of trailing symbol icons.
-NSInteger kTrailingSymbolImagePointSize = 22;
+constexpr NSInteger kTrailingSymbolImagePointSize = 22;
 
 // Registers account preference that will be used for Safe Browsing.
 PrefService* SetPrefService() {
diff --git a/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm
index 20f393cc..c5b9e75 100644
--- a/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm
+++ b/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm
@@ -165,7 +165,7 @@
 const base::TimeDelta kFreshInstallTimeDelta = base::Days(1);
 
 #if BUILDFLAG(CHROMIUM_BRANDING) && !defined(NDEBUG)
-NSString* kDevViewSourceKey = @"DevViewSource";
+NSString* const kDevViewSourceKey = @"DevViewSource";
 #endif  // BUILDFLAG(CHROMIUM_BRANDING) && !defined(NDEBUG)
 
 // Returns the branded version of the Google Services symbol.
diff --git a/ios/chrome/browser/shared/coordinator/scene/scene_state.mm b/ios/chrome/browser/shared/coordinator/scene/scene_state.mm
index 1bcfda7..025313a 100644
--- a/ios/chrome/browser/shared/coordinator/scene/scene_state.mm
+++ b/ios/chrome/browser/shared/coordinator/scene/scene_state.mm
@@ -20,7 +20,7 @@
 namespace {
 
 // Preference key used to store which profile is current.
-NSString* kIncognitoCurrentKey = @"IncognitoActive";
+NSString* const kIncognitoCurrentKey = @"IncognitoActive";
 
 // Represents the state of the -[SceneState incognitoContentVisible] property
 // that is saved in session storage (and thus unknown during app startup and
diff --git a/ios/chrome/browser/shared/model/utils/first_run_test_util.mm b/ios/chrome/browser/shared/model/utils/first_run_test_util.mm
index bb23ce9..a8e9e63b 100644
--- a/ios/chrome/browser/shared/model/utils/first_run_test_util.mm
+++ b/ios/chrome/browser/shared/model/utils/first_run_test_util.mm
@@ -9,7 +9,7 @@
 namespace {
 
 /// FirstRunRecency key, should match the one in `system_flags`.
-NSString* kFirstRunRecencyKey = @"FirstRunRecency";
+NSString* const kFirstRunRecencyKey = @"FirstRunRecency";
 
 }  // namespace
 
diff --git a/ios/chrome/browser/shared/ui/util/image/image_util.mm b/ios/chrome/browser/shared/ui/util/image/image_util.mm
index aeb74cef..f21c46a 100644
--- a/ios/chrome/browser/shared/ui/util/image/image_util.mm
+++ b/ios/chrome/browser/shared/ui/util/image/image_util.mm
@@ -13,13 +13,13 @@
 
 namespace {
 
-NSString* kImageExtensionJPG = @"jpg";
-NSString* kImageExtensionPNG = @"png";
-NSString* kImageExtensionTIF = @"tif";
-NSString* kImageExtensionBMP = @"bmp";
-NSString* kImageExtensionGIF = @"gif";
-NSString* kImageExtensionICO = @"ico";
-NSString* kImageExtensionWebP = @"webp";
+NSString* const kImageExtensionJPG = @"jpg";
+NSString* const kImageExtensionPNG = @"png";
+NSString* const kImageExtensionTIF = @"tif";
+NSString* const kImageExtensionBMP = @"bmp";
+NSString* const kImageExtensionGIF = @"gif";
+NSString* const kImageExtensionICO = @"ico";
+NSString* const kImageExtensionWebP = @"webp";
 
 // Returns whether `span` starts with `prefix`.
 template <typename T, size_t E>
diff --git a/ios/chrome/browser/sharing/ui_bundled/share_file_download_egtest.mm b/ios/chrome/browser/sharing/ui_bundled/share_file_download_egtest.mm
index 1e02413..89ebbdd 100644
--- a/ios/chrome/browser/sharing/ui_bundled/share_file_download_egtest.mm
+++ b/ios/chrome/browser/sharing/ui_bundled/share_file_download_egtest.mm
@@ -12,7 +12,7 @@
 #import "ios/testing/earl_grey/earl_grey_test.h"
 #import "net/test/embedded_test_server/embedded_test_server.h"
 
-NSString* kPNGFilename = @"chromium_logo";
+NSString* const kPNGFilename = @"chromium_logo";
 
 namespace {
 
diff --git a/ios/chrome/browser/start_surface/ui_bundled/start_surface_util.mm b/ios/chrome/browser/start_surface/ui_bundled/start_surface_util.mm
index 58eb11b..bb5c55db 100644
--- a/ios/chrome/browser/start_surface/ui_bundled/start_surface_util.mm
+++ b/ios/chrome/browser/start_surface/ui_bundled/start_surface_util.mm
@@ -17,7 +17,7 @@
 namespace {
 
 // The key to store the timestamp when the scene enters into background.
-NSString* kStartSurfaceSceneEnterIntoBackgroundTime =
+NSString* const kStartSurfaceSceneEnterIntoBackgroundTime =
     @"StartSurfaceSceneEnterIntoBackgroundTime";
 
 }  // namespace
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm b/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm
index edf79e34..8c000f5 100644
--- a/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm
+++ b/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm
@@ -38,7 +38,7 @@
 namespace {
 
 const char kTestEmail[] = "test@gmail.com";
-NSString* kExampleURL = @"http://example.com";
+NSString* const kExampleURL = @"http://example.com";
 
 }  // namespace
 
diff --git a/ios/chrome/browser/tab_switcher/tab_grid/base_grid/ui/base_grid_view_controller.mm b/ios/chrome/browser/tab_switcher/tab_grid/base_grid/ui/base_grid_view_controller.mm
index 2168c55..ca998e3 100644
--- a/ios/chrome/browser/tab_switcher/tab_grid/base_grid/ui/base_grid_view_controller.mm
+++ b/ios/chrome/browser/tab_switcher/tab_grid/base_grid/ui/base_grid_view_controller.mm
@@ -85,7 +85,7 @@
 // create/add to a group.
 // TODO(crbug.com/450613202): Define a fixed point margin for different device
 // size support.
-CGFloat kDragReorderMargin = 0.2;
+constexpr CGFloat kDragReorderMargin = 0.2;
 
 // Returns the accessibility identifier to set on a GroupGridCell when
 // positioned at the given index.
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/grid_cell.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/grid_cell.mm
index 828cb264..f35cb87 100644
--- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/grid_cell.mm
+++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/grid_cell.mm
@@ -28,7 +28,7 @@
 namespace {
 
 // The size of symbol icons.
-NSInteger kIconSymbolPointSize = 13;
+constexpr NSInteger kIconSymbolPointSize = 13;
 
 // Scale of activity indicator replacing fav icon when active.
 const CGFloat kIndicatorScale = 0.75;
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm
index 4ea56fc..4e5bf7c2 100644
--- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm
+++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm
@@ -34,7 +34,7 @@
 namespace {
 
 // The number of sections for the pinned collection view.
-NSInteger kNumberOfSectionsInPinnedCollection = 1;
+constexpr NSInteger kNumberOfSectionsInPinnedCollection = 1;
 
 // Pinned cell identifier.
 NSString* const kCellIdentifier = @"PinnedCellIdentifier";
diff --git a/ios/chrome/browser/tabs/ui_bundled/background_tab_animation_view.mm b/ios/chrome/browser/tabs/ui_bundled/background_tab_animation_view.mm
index f8da7ff..db07773 100644
--- a/ios/chrome/browser/tabs/ui_bundled/background_tab_animation_view.mm
+++ b/ios/chrome/browser/tabs/ui_bundled/background_tab_animation_view.mm
@@ -17,7 +17,7 @@
 const CGFloat kImageSize = 28;
 const CGFloat kMaxScale = 1.3;
 const CGFloat kMinScale = 0.7;
-CGFloat kRotationAngleInRadians = 20.0 / 180 * M_PI;
+constexpr CGFloat kRotationAngleInRadians = 20.0 / 180 * M_PI;
 }  // namespace
 
 @interface BackgroundTabAnimationView ()
diff --git a/ios/chrome/browser/toolbar/ui_bundled/adaptive_toolbar_egtest.mm b/ios/chrome/browser/toolbar/ui_bundled/adaptive_toolbar_egtest.mm
index a571431..02e2dc7 100644
--- a/ios/chrome/browser/toolbar/ui_bundled/adaptive_toolbar_egtest.mm
+++ b/ios/chrome/browser/toolbar/ui_bundled/adaptive_toolbar_egtest.mm
@@ -45,7 +45,7 @@
 const char kPageLoadedString[] = "Page loaded!";
 
 // The title of the test infobar.
-NSString* kTestInfoBarTitle = @"TestInfoBar";
+NSString* const kTestInfoBarTitle = @"TestInfoBar";
 
 // Defines the visibility of an element, in relation to the toolbar.
 typedef NS_ENUM(NSInteger, ButtonVisibility) {
diff --git a/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm b/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm
index d9103415..407aa6cf 100644
--- a/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm
+++ b/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm
@@ -28,9 +28,9 @@
 // Try to address a crash related to UIMenu and UIAction handling by UIKit
 // (see http://crbug.com/424069384). The fix ensures UIMenu objects have
 // non-empty titles and unique identifiers.
-NSString* kSharedActionsMenuIdentifier = @"kSharedActionsMenuIdentifier";
-NSString* kEditActionsMenuIdentifier = @"kEditActionsMenuIdentifier";
-NSString* kDestructiveActionsMenuIdentifier =
+NSString* const kSharedActionsMenuIdentifier = @"kSharedActionsMenuIdentifier";
+NSString* const kEditActionsMenuIdentifier = @"kEditActionsMenuIdentifier";
+NSString* const kDestructiveActionsMenuIdentifier =
     @"kDestructiveActionsMenuIdentifier";
 
 }  // namespace
diff --git a/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_mediator_unittest.mm b/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_mediator_unittest.mm
index fc1a09e7..e59e036 100644
--- a/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_mediator_unittest.mm
+++ b/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_mediator_unittest.mm
@@ -22,11 +22,11 @@
 const double kExpectedDefaultValue = 0;
 
 // Source and target units value fields in valid format.
-NSString* kValidSourceUnitValueField = @"1";
-NSString* kValidTargetUnitValueField = @"1000";
+NSString* const kValidSourceUnitValueField = @"1";
+NSString* const kValidTargetUnitValueField = @"1000";
 
 // Source/Target unit value field in invalid format.
-NSString* kInvalidUnitValueField = @"&1";
+NSString* const kInvalidUnitValueField = @"&1";
 
 }  // namespace
 
diff --git a/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_view_controller.mm b/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_view_controller.mm
index 4ff3f7a..35eee06 100644
--- a/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_view_controller.mm
+++ b/ios/chrome/browser/unit_conversion/ui_bundled/unit_conversion_view_controller.mm
@@ -50,8 +50,8 @@
 const CGFloat kUnitTitlePadding = 4;
 
 // Cells identifiers.
-NSString* kUnitTypeCellIdentifier = @"UnitTypeCell";
-NSString* kUnitTypeFieldCellIdentifier = @"UnitTypeValueFieldCell";
+NSString* const kUnitTypeCellIdentifier = @"UnitTypeCell";
+NSString* const kUnitTypeFieldCellIdentifier = @"UnitTypeValueFieldCell";
 
 // Source and target sections indexes.
 const NSInteger kSourceSection = 0;
diff --git a/ios/chrome/browser/web/model/child_window_open_by_dom_egtest.mm b/ios/chrome/browser/web/model/child_window_open_by_dom_egtest.mm
index dab1727..2067a033 100644
--- a/ios/chrome/browser/web/model/child_window_open_by_dom_egtest.mm
+++ b/ios/chrome/browser/web/model/child_window_open_by_dom_egtest.mm
@@ -20,8 +20,8 @@
 
 namespace {
 // Test link text and ids.
-NSString* kNamedWindowLink = @"openWindowWithName";
-NSString* kUnnamedWindowLink = @"openWindowNoName";
+NSString* const kNamedWindowLink = @"openWindowWithName";
+NSString* const kUnnamedWindowLink = @"openWindowNoName";
 
 // Web view text that indicates window's closed state.
 const char kWindow2NeverOpen[] = "window2.closed: never opened";
diff --git a/ios/chrome/browser/web/model/error_page_util_unittest.mm b/ios/chrome/browser/web/model/error_page_util_unittest.mm
index 8809a209..cc77a4fd 100644
--- a/ios/chrome/browser/web/model/error_page_util_unittest.mm
+++ b/ios/chrome/browser/web/model/error_page_util_unittest.mm
@@ -21,7 +21,7 @@
 
 // URL string passed from ios/web layer to ios/chrome and rendered on the error
 // page.
-NSString* kTestUrl = @"https://chromium.test/";
+NSString* const kTestUrl = @"https://chromium.test/";
 
 // Returns string for the given error code.
 NSString* ErrorAsString(int net_error) {
diff --git a/ios/chrome/browser/web/model/forms_egtest.mm b/ios/chrome/browser/web/model/forms_egtest.mm
index 310a9f8..20984186 100644
--- a/ios/chrome/browser/web/model/forms_egtest.mm
+++ b/ios/chrome/browser/web/model/forms_egtest.mm
@@ -42,7 +42,7 @@
 constexpr char kGenericText[] = "A generic page";
 
 // Label for the button in the form.
-NSString* kSubmitButtonLabel = @"submit";
+NSString* const kSubmitButtonLabel = @"submit";
 
 // Html form template with a submission button named "submit".
 constexpr char kFormHtmlTemplate[] =
diff --git a/ios/chrome/browser/web/model/navigation_egtest.mm b/ios/chrome/browser/web/model/navigation_egtest.mm
index 7c3ee58..4ca1052 100644
--- a/ios/chrome/browser/web/model/navigation_egtest.mm
+++ b/ios/chrome/browser/web/model/navigation_egtest.mm
@@ -55,8 +55,8 @@
 NSString* const kGoBackTwoID = @"go-back-2";
 
 // URLs and labels for testWindowLocation* tests.
-NSString* kHashChangeWithHistoryLabel = @"hashChangedWithHistory";
-NSString* kHashChangeWithoutHistoryLabel = @"hashChangedWithoutHistory";
+NSString* const kHashChangeWithHistoryLabel = @"hashChangedWithHistory";
+NSString* const kHashChangeWithoutHistoryLabel = @"hashChangedWithoutHistory";
 const char kPage1URL[] = "/page1/";
 const char kHashChangedWithHistoryURL[] = "/page1/#hashChangedWithHistory";
 const char kHashChangedWithoutHistoryURL[] =
diff --git a/ios/chrome/browser/web_selection/model/web_selection_java_script_feature_unittest.mm b/ios/chrome/browser/web_selection/model/web_selection_java_script_feature_unittest.mm
index e1a6c33..3ef9a03 100644
--- a/ios/chrome/browser/web_selection/model/web_selection_java_script_feature_unittest.mm
+++ b/ios/chrome/browser/web_selection/model/web_selection_java_script_feature_unittest.mm
@@ -23,7 +23,7 @@
 #import "testing/platform_test.h"
 
 namespace {
-NSString* kPageHTML =
+NSString* const kPageHTML =
     @"<html>"
      "  <body>"
      "    This text contains a <span id='selectid'>selection</span>."
diff --git a/ios/chrome/browser/web_selection/model/web_selection_tab_helper_unittest.mm b/ios/chrome/browser/web_selection/model/web_selection_tab_helper_unittest.mm
index dea83bf..7764ebfb 100644
--- a/ios/chrome/browser/web_selection/model/web_selection_tab_helper_unittest.mm
+++ b/ios/chrome/browser/web_selection/model/web_selection_tab_helper_unittest.mm
@@ -23,7 +23,7 @@
 #import "testing/platform_test.h"
 
 namespace {
-NSString* kPageHTML =
+NSString* const kPageHTML =
     @"<html>"
      "  <body>"
      "    This text contains a <span id='selectid'>selection</span>."
@@ -38,7 +38,7 @@
      "  </body>"
      "</html>";
 
-NSString* kPage2HTML =
+NSString* const kPage2HTML =
     @"<html>"
      "  <body>"
      "    This text contains a <span id='selectid'>selection2</span>."
diff --git a/ios/chrome/browser/welcome_back/coordinator/BUILD.gn b/ios/chrome/browser/welcome_back/coordinator/BUILD.gn
index 4b35cb3..960634e5 100644
--- a/ios/chrome/browser/welcome_back/coordinator/BUILD.gn
+++ b/ios/chrome/browser/welcome_back/coordinator/BUILD.gn
@@ -16,11 +16,12 @@
   deps = [
     "//base",
     "//components/feature_engagement/public",
-    "//components/password_manager/core/browser",
     "//ios/chrome/app/strings:ios_strings_grit",
     "//ios/chrome/browser/feature_engagement/model",
     "//ios/chrome/browser/first_run/public:best_features_item",
     "//ios/chrome/browser/first_run/ui_bundled:features",
+    "//ios/chrome/browser/first_run/ui_bundled:screen_delegate",
+    "//ios/chrome/browser/first_run/ui_bundled/best_features/coordinator",
     "//ios/chrome/browser/shared/model/application_context",
     "//ios/chrome/browser/shared/model/browser",
     "//ios/chrome/browser/shared/model/profile",
diff --git a/ios/chrome/browser/welcome_back/coordinator/DEPS b/ios/chrome/browser/welcome_back/coordinator/DEPS
index f476486..22cc9f60 100644
--- a/ios/chrome/browser/welcome_back/coordinator/DEPS
+++ b/ios/chrome/browser/welcome_back/coordinator/DEPS
@@ -4,4 +4,5 @@
   "+ios/chrome/browser/first_run/ui_bundled/best_features",
   "+ios/chrome/browser/first_run/ui_bundled/features.h",
   "+ios/chrome/browser/signin/model",
+  "+ios/chrome/browser/first_run/ui_bundled/first_run_screen_delegate.h",
 ]
diff --git a/ios/chrome/browser/welcome_back/coordinator/welcome_back_coordinator.mm b/ios/chrome/browser/welcome_back/coordinator/welcome_back_coordinator.mm
index 7f9f292..66ca011 100644
--- a/ios/chrome/browser/welcome_back/coordinator/welcome_back_coordinator.mm
+++ b/ios/chrome/browser/welcome_back/coordinator/welcome_back_coordinator.mm
@@ -4,38 +4,44 @@
 
 #import "ios/chrome/browser/welcome_back/coordinator/welcome_back_coordinator.h"
 
+#import <UIKit/UIKit.h>
+
 #import "components/feature_engagement/public/event_constants.h"
 #import "components/feature_engagement/public/tracker.h"
-#import "components/password_manager/core/browser/password_manager_util.h"
 #import "ios/chrome/browser/feature_engagement/model/tracker_factory.h"
 #import "ios/chrome/browser/first_run/public/best_features_item.h"
-#import "ios/chrome/browser/shared/model/application_context/application_context.h"
+#import "ios/chrome/browser/first_run/ui_bundled/best_features/coordinator/best_features_screen_detail_coordinator.h"
+#import "ios/chrome/browser/first_run/ui_bundled/first_run_screen_delegate.h"
 #import "ios/chrome/browser/shared/model/browser/browser.h"
 #import "ios/chrome/browser/shared/model/profile/profile_ios.h"
 #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h"
 #import "ios/chrome/browser/shared/public/commands/welcome_back_promo_commands.h"
+#import "ios/chrome/browser/signin/model/authentication_service.h"
 #import "ios/chrome/browser/signin/model/authentication_service_factory.h"
+#import "ios/chrome/browser/signin/model/chrome_account_manager_service.h"
 #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/welcome_back/coordinator/welcome_back_mediator.h"
 #import "ios/chrome/browser/welcome_back/model/features.h"
-#import "ios/chrome/browser/welcome_back/model/welcome_back_prefs.h"
 #import "ios/chrome/browser/welcome_back/ui/welcome_back_action_handler.h"
+#import "ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.h"
 #import "ios/chrome/common/ui/confirmation_alert/confirmation_alert_action_handler.h"
-#import "ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_coordinator.h"
 
 @interface WelcomeBackCoordinator () <ConfirmationAlertActionHandler,
-                                      WelcomeBackActionHandler>
+                                      WelcomeBackActionHandler,
+                                      FirstRunScreenDelegate,
+                                      UINavigationControllerDelegate,
+                                      UIAdaptivePresentationControllerDelegate>
 @end
 
 @implementation WelcomeBackCoordinator {
   // Welcome Back mediator.
   WelcomeBackMediator* _mediator;
+  // Welcome Back view controller.
+  WelcomeBackViewController* _viewController;
   // Base navigation controller.
   UINavigationController* _navigationController;
-  // The InstructionsBottomSheetCoordinator.
-  InstructionsBottomSheetCoordinator* _detailScreenCoordinator;
-  // Whether the user has tapped one of the Welcome Back items.
-  BOOL _itemTapped;
+  // The BestFeaturesScreenDetail coordinator.
+  BestFeaturesScreenDetailCoordinator* _detailScreenCoordinator;
 }
 
 #pragma mark - ChromeCoordinator
@@ -44,32 +50,51 @@
   ProfileIOS* profile = self.profile->GetOriginalProfile();
   AuthenticationService* authenticationService =
       AuthenticationServiceFactory::GetForProfile(profile);
-
-  _navigationController =
-      [[UINavigationController alloc] initWithNavigationBarClass:nil
-                                                    toolbarClass:nil];
+  ChromeAccountManagerService* accountManagerService =
+      ChromeAccountManagerServiceFactory::GetForProfile(profile);
 
   _mediator = [[WelcomeBackMediator alloc]
       initWithAuthenticationService:authenticationService
-              accountManagerService:ChromeAccountManagerServiceFactory::
-                                        GetForProfile(profile)];
+              accountManagerService:accountManagerService];
 
-  // `kAutofillPasswordsInOtherApps` has been used if CPE is enabled on startup,
-  // so remove the feature from the eligible features.
-  PrefService* localState = GetApplicationContext()->GetLocalState();
-  if (password_manager_util::IsCredentialProviderEnabledOnStartup(localState)) {
-    MarkWelcomeBackFeatureUsed(
-        BestFeaturesItemType::kAutofillPasswordsInOtherApps);
-  }
+  _viewController = [[WelcomeBackViewController alloc] init];
+  _viewController.actionHandler = self;
+  _viewController.welcomeBackActionHandler = self;
 
-  if (GetWelcomeBackEligibleItems().size() < 2) {
-    [self hidePromo];
-  } else {
-    // TODO(crbug.com/407963758): Implement the Welcome Back Half Sheet view.
-  }
+  _mediator.consumer = _viewController;
+
+  _navigationController = [[UINavigationController alloc]
+      initWithRootViewController:_viewController];
+  _navigationController.navigationBarHidden = YES;
+  _navigationController.delegate = self;
+  _navigationController.presentationController.delegate = self;
+
+  UISheetPresentationController* sheetController =
+      _navigationController.sheetPresentationController;
+
+  // Set both possible detents from the start.
+  sheetController.detents = @[
+    _viewController.preferredHeightDetent,
+    [UISheetPresentationControllerDetent largeDetent]
+  ];
+
+  [self.baseViewController presentViewController:_navigationController
+                                        animated:YES
+                                      completion:nil];
 }
 
 - (void)stop {
+  // Dismiss the presented view controller.
+  if (_navigationController.presentingViewController &&
+      !_navigationController.isBeingDismissed) {
+    [_navigationController.presentingViewController
+        dismissViewControllerAnimated:YES
+                           completion:nil];
+  }
+
+  // Clean up references.
+  _viewController = nil;
+  _navigationController = nil;
   [_mediator disconnect];
   _mediator = nil;
 }
@@ -85,24 +110,63 @@
 - (void)didTapBestFeatureItem:(BestFeaturesItem*)item {
   feature_engagement::TrackerFactory::GetForProfile(self.profile)
       ->NotifyEvent(feature_engagement::events::kIOSWelcomeBackPromoUsed);
-  _itemTapped = YES;
 
-  _detailScreenCoordinator = [[InstructionsBottomSheetCoordinator alloc]
-      initWithBaseViewController:_navigationController
-                         browser:self.browser
-                           title:item.title
-                           steps:item.instructionSteps];
+  // Ensure the sheet is at the large detent.
+  [_navigationController.sheetPresentationController animateChanges:^{
+    _navigationController.sheetPresentationController.selectedDetentIdentifier =
+        UISheetPresentationControllerDetentIdentifierLarge;
+  }];
 
+  _detailScreenCoordinator = [[BestFeaturesScreenDetailCoordinator alloc]
+      initWithBaseNavigationViewController:_navigationController
+                                   browser:self.browser
+                          bestFeaturesItem:item];
+  _detailScreenCoordinator.delegate = self;
   [_detailScreenCoordinator start];
 }
 
+#pragma mark - FirstRunScreenDelegate
+
+- (void)screenWillFinishPresenting {
+  // First dismiss the best feature detail view.
+  [_navigationController.presentingViewController
+      dismissViewControllerAnimated:YES
+                         completion:nil];
+  [_detailScreenCoordinator stop];
+  _detailScreenCoordinator = nil;
+  // Clean the promo.
+  [self hidePromo];
+}
+
+#pragma mark - UINavigationControllerDelegate
+
+- (void)navigationController:(UINavigationController*)navigationController
+      willShowViewController:(UIViewController*)viewController
+                    animated:(BOOL)animated {
+  BOOL isWelcomeBackViewController =
+      [viewController isKindOfClass:[WelcomeBackViewController class]];
+  // When navigating back to the welcome back screen from a feature detail
+  // screen.
+  if (isWelcomeBackViewController && _detailScreenCoordinator) {
+    _navigationController.navigationBarHidden = YES;
+    [_detailScreenCoordinator stop];
+    _detailScreenCoordinator = nil;
+  }
+}
+
+#pragma mark - UIAdaptivePresentationControllerDelegate
+
+- (void)presentationControllerDidDismiss:
+    (UIPresentationController*)presentationController {
+  [self hidePromo];
+}
+
 #pragma mark - Private
 
-// Dismisses the feature.
+// Dismisses the promo by sending a command.
 - (void)hidePromo {
   id<WelcomeBackPromoCommands> handler = HandlerForProtocol(
       self.browser->GetCommandDispatcher(), WelcomeBackPromoCommands);
-
   [handler hideWelcomeBackPromo];
 }
 
diff --git a/ios/chrome/browser/welcome_back/ui/BUILD.gn b/ios/chrome/browser/welcome_back/ui/BUILD.gn
index e5b5768..a96b6ff4 100644
--- a/ios/chrome/browser/welcome_back/ui/BUILD.gn
+++ b/ios/chrome/browser/welcome_back/ui/BUILD.gn
@@ -8,6 +8,8 @@
     "welcome_back_display_handler.h",
     "welcome_back_display_handler.mm",
     "welcome_back_screen_consumer.h",
+    "welcome_back_view_controller.h",
+    "welcome_back_view_controller.mm",
   ]
   public_deps = [
     "//ios/chrome/browser/promos_manager/ui_bundled:promos",
@@ -15,8 +17,17 @@
   ]
   deps = [
     "//components/feature_engagement/public",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/first_run/public:best_features_item",
+    "//ios/chrome/browser/first_run/ui_bundled/best_features/ui",
     "//ios/chrome/browser/promos_manager/model:types",
+    "//ios/chrome/browser/shared/ui/list_model",
+    "//ios/chrome/browser/shared/ui/symbols",
+    "//ios/chrome/browser/shared/ui/table_view:utils",
     "//ios/chrome/browser/welcome_back/resources",
+    "//ios/chrome/common/ui/button_stack",
+    "//ios/chrome/common/ui/colors",
+    "//ios/chrome/common/ui/table_view:cells_constants",
   ]
   frameworks = [
     "Foundation.framework",
diff --git a/ios/chrome/browser/welcome_back/ui/DEPS b/ios/chrome/browser/welcome_back/ui/DEPS
index 87143a57d..51c395a 100644
--- a/ios/chrome/browser/welcome_back/ui/DEPS
+++ b/ios/chrome/browser/welcome_back/ui/DEPS
@@ -1,3 +1,5 @@
 include_rules = [
   "+ios/chrome/browser/promos_manager/model",
+  "+ios/chrome/browser/first_run/public/best_features_item.h",
+  "+ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.h",
 ]
diff --git a/ios/chrome/browser/welcome_back/ui/welcome_back_screen_consumer.h b/ios/chrome/browser/welcome_back/ui/welcome_back_screen_consumer.h
index 897f717..23a1a6cb 100644
--- a/ios/chrome/browser/welcome_back/ui/welcome_back_screen_consumer.h
+++ b/ios/chrome/browser/welcome_back/ui/welcome_back_screen_consumer.h
@@ -6,6 +6,7 @@
 #define IOS_CHROME_BROWSER_WELCOME_BACK_UI_WELCOME_BACK_SCREEN_CONSUMER_H_
 
 #import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
 
 @class BestFeaturesItem;
 
diff --git a/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.h b/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.h
new file mode 100644
index 0000000..532d888e
--- /dev/null
+++ b/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.h
@@ -0,0 +1,23 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_WELCOME_BACK_UI_WELCOME_BACK_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_WELCOME_BACK_UI_WELCOME_BACK_VIEW_CONTROLLER_H_
+
+#import "ios/chrome/browser/welcome_back/ui/welcome_back_screen_consumer.h"
+#import "ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h"
+
+@protocol WelcomeBackActionHandler;
+
+// View controller that presents a half-sheet UI displaying the Welcome Back
+// promo.
+@interface WelcomeBackViewController
+    : ConfirmationAlertViewController <WelcomeBackScreenConsumer>
+
+@property(nonatomic, weak) id<WelcomeBackActionHandler>
+    welcomeBackActionHandler;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_WELCOME_BACK_UI_WELCOME_BACK_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.mm b/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.mm
new file mode 100644
index 0000000..18034cf
--- /dev/null
+++ b/ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.mm
@@ -0,0 +1,309 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/welcome_back/ui/welcome_back_view_controller.h"
+
+#import <UIKit/UIKit.h>
+
+#import "ios/chrome/browser/first_run/public/best_features_item.h"
+#import "ios/chrome/browser/first_run/ui_bundled/best_features/ui/best_features_cell.h"
+#import "ios/chrome/browser/shared/ui/list_model/list_model.h"
+#import "ios/chrome/browser/shared/ui/symbols/symbols.h"
+#import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h"
+#import "ios/chrome/browser/welcome_back/ui/welcome_back_action_handler.h"
+#import "ios/chrome/common/ui/button_stack/button_stack_configuration.h"
+#import "ios/chrome/common/ui/colors/semantic_color_names.h"
+#import "ios/chrome/common/ui/table_view/table_view_cells_constants.h"
+#import "ios/chrome/grit/ios_strings.h"
+#import "ui/base/l10n/l10n_util.h"
+
+namespace {
+
+typedef NS_ENUM(NSInteger, SectionIdentifier) {
+  SectionIdentifierFeatures,
+  // Add other features here if needed.
+};
+
+// Size of the icon image view.
+constexpr CGFloat kIconSize = 45.0f;
+// Side length for the custom favicon.
+constexpr CGFloat kCustomFaviconSideLength = 52.0f;
+
+// Spacing Constants
+constexpr CGFloat kSpacingBeforeImageNoNav = 24.0f;
+constexpr CGFloat kSpacingAfterImage = 16.0f;
+constexpr CGFloat kTableViewHorizontalPadding = 6.0f;
+
+}  // namespace
+
+@interface WelcomeBackViewController () <UITableViewDelegate>
+@end
+
+@implementation WelcomeBackViewController {
+  // List of items to display.
+  NSArray<BestFeaturesItem*>* _welcomeBackItems;
+  // Table view displaying a Welcome Back Item in each row.
+  UITableView* _tableView;
+  // Data source for the table view.
+  UITableViewDiffableDataSource<NSNumber*, BestFeaturesItem*>* _dataSource;
+  // Height constraint for the table view.
+  NSLayoutConstraint* _tableViewHeightConstraint;
+  // The title string.
+  NSString* _title;
+  // The user's avatar.
+  UIImage* _userAvatar;
+  // Reference to the subtitle view to apply correct constraints.
+  UITextView* _subtitleView;
+}
+
+#pragma mark - UIViewController
+
+- (void)viewWillAppear:(BOOL)animated {
+  [super viewWillAppear:animated];
+  // Ensure the sheet is at the correct custom detent.
+  if (self.navigationController.sheetPresentationController) {
+    [self.navigationController.sheetPresentationController animateChanges:^{
+      self.navigationController.sheetPresentationController
+          .selectedDetentIdentifier = @"preferred_height";
+    }];
+  }
+}
+
+- (void)viewDidLoad {
+  // Configure the strings and layout.
+  self.titleString = _title;
+  self.subtitleString = l10n_util::GetNSString(IDS_IOS_WELCOME_BACK_SUBTITLE);
+
+  // Create the table view.
+  _tableView = [self createTableView];
+  _dataSource = [self createAndFillDataSource];
+  _tableView.dataSource = _dataSource;
+  self.underTitleView = _tableView;
+
+  // Set up the action button.
+  self.configuration.primaryActionString =
+      l10n_util::GetNSString(IDS_IOS_WELCOME_BACK_KEEP_BROWSING_BUTTON);
+
+  // Configure the title style.
+  self.titleTextStyle = UIFontTextStyleTitle2;
+
+  // Configure image.
+  if (_userAvatar) {
+    self.aboveTitleView = [self createCompositeAvatarImage];
+  } else {
+#if BUILDFLAG(IOS_USE_BRANDED_SYMBOLS)
+    UIImage* logo = MakeSymbolMulticolor(
+        CustomSymbolWithPointSize(kMulticolorChromeballSymbol, kIconSize));
+#else
+    UIImage* logo = CustomSymbolWithPointSize(kChromeProductSymbol, kIconSize);
+#endif  // BUILDFLAG(IOS_USE_BRANDED_SYMBOLS)
+    self.image = logo;
+    self.imageBackgroundColor = [UIColor colorNamed:kBackgroundColor];
+    self.imageEnclosedWithShadowWithoutBadge = YES;
+    self.customFaviconSideLength = kCustomFaviconSideLength;
+    self.customSpacingAfterImage = kSpacingAfterImage;
+    self.imageEnclosedWithShadowAndBadge = NO;
+  }
+
+  self.imageHasFixedSize = YES;
+  self.customSpacingBeforeImageIfNoNavigationBar = kSpacingBeforeImageNoNav;
+
+  // Configure layout preferences.
+  self.showDismissBarButton = NO;
+  self.topAlignedLayout = YES;
+  self.scrollEnabled = YES;
+
+  [super viewDidLoad];
+
+  _tableViewHeightConstraint =
+      [_tableView.heightAnchor constraintEqualToConstant:0];
+
+  [NSLayoutConstraint activateConstraints:@[
+    _tableViewHeightConstraint,
+    [_tableView.leadingAnchor
+        constraintEqualToAnchor:self.contentView.leadingAnchor
+                       constant:kTableViewHorizontalPadding],
+    [_tableView.trailingAnchor
+        constraintEqualToAnchor:self.contentView.trailingAnchor
+                       constant:-kTableViewHorizontalPadding],
+  ]];
+
+  // Initial height update.
+  [self.view layoutIfNeeded];
+  [self updateTableViewHeightConstraint];
+}
+
+- (void)viewWillLayoutSubviews {
+  [super viewWillLayoutSubviews];
+  [self updateTableViewHeightConstraint];
+  __weak __typeof(self) weakSelf = self;
+  [weakSelf.sheetPresentationController animateChanges:^{
+    [weakSelf.sheetPresentationController invalidateDetents];
+  }];
+}
+
+#pragma mark - ConfirmationAlertViewController
+
+- (void)customizeSubtitle:(UITextView*)subtitle {
+  [super customizeSubtitle:subtitle];
+  // Keep a reference to the subtitle view to apply custom layout.
+  _subtitleView = subtitle;
+  _subtitleView.translatesAutoresizingMaskIntoConstraints = NO;
+  self.subtitleTextStyle = UIFontTextStyleSubheadline;
+}
+
+#pragma mark - WelcomeBackScreenConsumer
+
+- (void)setWelcomeBackItems:(NSArray<BestFeaturesItem*>*)items {
+  _welcomeBackItems = [items copy];
+}
+
+- (void)setTitle:(NSString*)title {
+  _title = [title copy];
+}
+
+- (void)setAvatar:(UIImage*)userAvatar {
+  _userAvatar = userAvatar;
+}
+
+#pragma mark - UITableViewDelegate
+
+- (void)tableView:(UITableView*)tableView
+    didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
+  [_tableView deselectRowAtIndexPath:indexPath animated:YES];
+}
+
+- (void)tableView:(UITableView*)tableView
+    performPrimaryActionForRowAtIndexPath:(NSIndexPath*)indexPath {
+  BestFeaturesItem* item = [_dataSource itemIdentifierForIndexPath:indexPath];
+  if (!item) {
+    return;
+  }
+
+  [self.welcomeBackActionHandler didTapBestFeatureItem:item];
+}
+
+#pragma mark - Private
+
+// Creates a composite image with the user's avatar centered over the confetti
+// background.
+- (UIView*)createCompositeAvatarImage {
+  UIImage* confettiImage = [UIImage imageNamed:@"confetti_burst_frame"];
+
+  UIImageView* compositeImageView =
+      [[UIImageView alloc] initWithImage:confettiImage];
+  compositeImageView.translatesAutoresizingMaskIntoConstraints = NO;
+
+  UIImageView* avatarImageView =
+      [[UIImageView alloc] initWithImage:_userAvatar];
+
+  avatarImageView.frame = CGRectMake(
+      (confettiImage.size.width - kIconSize) / 2.0,
+      (confettiImage.size.height - kIconSize) / 2.0, kIconSize, kIconSize);
+
+  avatarImageView.layer.cornerRadius = kIconSize / 2.0f;
+  avatarImageView.clipsToBounds = YES;
+  avatarImageView.contentMode = UIViewContentModeScaleAspectFill;
+
+  [compositeImageView addSubview:avatarImageView];
+
+  UIView* containerView = [[UIView alloc] init];
+  containerView.translatesAutoresizingMaskIntoConstraints = NO;
+
+  [containerView addSubview:compositeImageView];
+
+  [NSLayoutConstraint activateConstraints:@[
+    [compositeImageView.leadingAnchor
+        constraintEqualToAnchor:containerView.leadingAnchor],
+    [compositeImageView.trailingAnchor
+        constraintEqualToAnchor:containerView.trailingAnchor],
+    [compositeImageView.topAnchor
+        constraintEqualToAnchor:containerView.topAnchor
+                       constant:kSpacingBeforeImageNoNav],
+    [compositeImageView.bottomAnchor
+        constraintEqualToAnchor:containerView.bottomAnchor
+                       constant:-kSpacingAfterImage]
+  ]];
+
+  return containerView;
+}
+
+// Creates the table view.
+- (UITableView*)createTableView {
+  UITableView* tableView =
+      [[UITableView alloc] initWithFrame:CGRectZero
+                                   style:UITableViewStylePlain];
+  tableView.translatesAutoresizingMaskIntoConstraints = NO;
+  tableView.delegate = self;
+  tableView.separatorInsetReference = UITableViewSeparatorInsetFromCellEdges;
+  tableView.showsVerticalScrollIndicator = NO;
+  tableView.scrollEnabled = NO;
+
+  // Remove separators for all but the last cell.
+  tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
+  tableView.accessibilityIdentifier =
+      @"WelcomeBackTableViewAccessibilityIdentifier";
+
+  RegisterTableViewCell<BestFeaturesCell>(tableView);
+
+  return tableView;
+}
+
+// Creates the data source for the table view.
+- (UITableViewDiffableDataSource<NSNumber*, BestFeaturesItem*>*)
+    createAndFillDataSource {
+  CHECK(_welcomeBackItems);
+  __weak __typeof(self) weakSelf = self;
+  UITableViewDiffableDataSource<NSNumber*, BestFeaturesItem*>* dataSource =
+      [[UITableViewDiffableDataSource alloc]
+          initWithTableView:_tableView
+               cellProvider:^UITableViewCell*(
+                   UITableView* view, NSIndexPath* indexPath,
+                   BestFeaturesItem* itemIdentifier) {
+                 return [weakSelf cellForTableView:view
+                                         indexPath:indexPath
+                                    itemIdentifier:itemIdentifier];
+               }];
+
+  NSDiffableDataSourceSnapshot<NSNumber*, BestFeaturesItem*>* snapshot =
+      [[NSDiffableDataSourceSnapshot alloc] init];
+  [snapshot appendSectionsWithIdentifiers:@[ @(SectionIdentifierFeatures) ]];
+  [snapshot appendItemsWithIdentifiers:_welcomeBackItems
+             intoSectionWithIdentifier:@(SectionIdentifierFeatures)];
+
+  [dataSource applySnapshot:snapshot animatingDifferences:NO];
+
+  return dataSource;
+}
+
+// Configures the table view cells.
+- (UITableViewCell*)cellForTableView:(UITableView*)tableView
+                           indexPath:(NSIndexPath*)indexPath
+                      itemIdentifier:(BestFeaturesItem*)itemIdentifier {
+  BestFeaturesCell* cell = DequeueTableViewCell<BestFeaturesCell>(tableView);
+  [cell setBestFeaturesItem:itemIdentifier];
+  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+
+  // Removes the last cell separator.
+  NSInteger lastSectionIndex = [tableView numberOfSections] - 1;
+  NSInteger lastRowIndex =
+      [tableView numberOfRowsInSection:lastSectionIndex] - 1;
+  if (indexPath.section == lastSectionIndex && indexPath.row == lastRowIndex) {
+    cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, CGFLOAT_MAX);
+  }
+
+  return cell;
+}
+
+// Updates the tableView's height constraint based on its content size.
+// This is necessary because scrolling is disabled.
+- (void)updateTableViewHeightConstraint {
+  [_tableView layoutIfNeeded];
+  CGFloat newHeight = _tableView.contentSize.height;
+  if (_tableViewHeightConstraint.constant != newHeight) {
+    _tableViewHeightConstraint.constant = newHeight;
+  }
+}
+
+@end
diff --git a/ios/chrome/common/ntp_tile/ntp_tile.mm b/ios/chrome/common/ntp_tile/ntp_tile.mm
index ba64f63..e90d8a6 100644
--- a/ios/chrome/common/ntp_tile/ntp_tile.mm
+++ b/ios/chrome/common/ntp_tile/ntp_tile.mm
@@ -5,15 +5,15 @@
 #import "ios/chrome/common/ntp_tile/ntp_tile.h"
 
 namespace {
-NSString* kTitleKey = @"title";
-NSString* kURLKey = @"URL";
-NSString* kfaviconFileNameKey = @"faviconFileName";
-NSString* kFallbackTextColorKey = @"fallbackTextColor";
-NSString* kFallbackBackgroundColorKey = @"fallbackBackgroundColor";
-NSString* kFallbackIsDefaultColorKey = @"fallbackIsDefaultColor";
-NSString* kFallbackMonogram = @"fallbackMonogram";
-NSString* kFaviconFetched = @"faviconFetched";
-NSString* kPosition = @"position";
+NSString* const kTitleKey = @"title";
+NSString* const kURLKey = @"URL";
+NSString* const kfaviconFileNameKey = @"faviconFileName";
+NSString* const kFallbackTextColorKey = @"fallbackTextColor";
+NSString* const kFallbackBackgroundColorKey = @"fallbackBackgroundColor";
+NSString* const kFallbackIsDefaultColorKey = @"fallbackIsDefaultColor";
+NSString* const kFallbackMonogram = @"fallbackMonogram";
+NSString* const kFaviconFetched = @"faviconFetched";
+NSString* const kPosition = @"position";
 }  // namespace
 
 @implementation NTPTile
diff --git a/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h b/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h
index 26f5b99d..dd381f6 100644
--- a/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h
+++ b/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h
@@ -50,10 +50,6 @@
 // the view is loaded.
 @property(nonatomic, copy) UIColor* mainBackgroundColor;
 
-// The navigation bar title view. Nil if not needed. If needed, must be set
-// before the view is loaded.
-@property(nonatomic, strong) UIView* titleView;
-
 // The view displayed above titles and subtitles, but under the navigation bar
 // and the image view. Nil if not needed. If needed, must be set before the view
 // is loaded.
diff --git a/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.mm b/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.mm
index b53701a..22420b10 100644
--- a/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.mm
+++ b/ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.mm
@@ -380,10 +380,6 @@
 
   UINavigationItem* navigationItem = [[UINavigationItem alloc] init];
 
-  if (self.titleView) {
-    navigationItem.titleView = self.titleView;
-  }
-
   if (self.showDismissBarButton) {
     UIBarButtonItem* dismissButton;
     if (self.customDismissBarButtonImage) {
@@ -570,7 +566,7 @@
 }
 
 - (BOOL)hasNavigationBar {
-  return self.showDismissBarButton || self.titleView;
+  return self.showDismissBarButton;
 }
 
 // Helper to create the stack view.
diff --git a/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_coordinator.mm b/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_coordinator.mm
index 52ef459f3..641a9bf 100644
--- a/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_coordinator.mm
+++ b/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_coordinator.mm
@@ -15,6 +15,8 @@
 @implementation InstructionsBottomSheetCoordinator {
   // The view controller for this coordinator.
   InstructionsBottomSheetViewController* _viewController;
+  // The navigation controller containing the instructions.
+  UINavigationController* _navigationController;
   // The title of the bottom sheet.
   NSString* _title;
   // The instruction steps to be displayed.
@@ -36,24 +38,31 @@
 #pragma mark - Chrome Coordinator
 
 - (void)start {
-  [super start];
-
   _viewController =
       [[InstructionsBottomSheetViewController alloc] initWithTitle:_title
                                                       instructions:_steps];
   _viewController.actionHandler = self;
 
+  _navigationController = [[UINavigationController alloc]
+      initWithRootViewController:_viewController];
+
+  _viewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
+      initWithBarButtonSystemItem:UIBarButtonSystemItemClose
+                           target:self
+                           action:@selector(stop)];
+
   self.baseViewController.presentationController.delegate = self;
-  [self.baseViewController presentViewController:_viewController
+  [self.baseViewController presentViewController:_navigationController
                                         animated:YES
                                       completion:nil];
 }
 
 - (void)stop {
-  [self.baseViewController dismissViewControllerAnimated:YES completion:nil];
+  [_navigationController.presentingViewController
+      dismissViewControllerAnimated:YES
+                         completion:nil];
   _viewController = nil;
-
-  [super stop];
+  _navigationController = nil;
 }
 
 #pragma mark - UIAdaptivePresentationControllerDelegate
@@ -69,8 +78,4 @@
   // No primary action.
 }
 
-- (void)confirmationAlertDismissAction {
-  [self stop];
-}
-
 @end
diff --git a/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_view_controller.mm b/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_view_controller.mm
index 54009211..7785826 100644
--- a/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_view_controller.mm
+++ b/ios/chrome/common/ui/instructions_bottom_sheet/instructions_bottom_sheet_view_controller.mm
@@ -28,32 +28,16 @@
 
 - (void)viewDidLoad {
   self.topAlignedLayout = YES;
-  self.scrollEnabled = NO;
-  self.dismissBarButtonSystemItem = UIBarButtonSystemItemClose;
-  self.titleView = [self createTitleLabel];
+  self.title = _titleString;
+  self.showDismissBarButton = NO;
   self.underTitleView = [self createInstructionView];
   [super viewDidLoad];
 
   [self setUpBottomSheetDetents];
-  [self expandBottomSheet];
 }
 
 #pragma mark - Private
 
-// Returns a label to use as the title of the instructions view.
-- (UILabel*)createTitleLabel {
-  UILabel* label = [[UILabel alloc] init];
-  label.translatesAutoresizingMaskIntoConstraints = NO;
-  label.numberOfLines = 0;
-  label.text = _titleString;
-  label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
-  label.adjustsFontForContentSizeCategory = YES;
-  label.textAlignment = NSTextAlignmentCenter;
-  label.accessibilityTraits |= UIAccessibilityTraitHeader;
-
-  return label;
-}
-
 // Returns a view containing instructions to enable Enhanced Safe Browsing.
 - (InstructionView*)createInstructionView {
   InstructionView* view = [[InstructionView alloc] initWithList:_steps];
diff --git a/ios/chrome/credential_provider_extension/metrics_util_unittest.mm b/ios/chrome/credential_provider_extension/metrics_util_unittest.mm
index 6f41832..06ab12fa 100644
--- a/ios/chrome/credential_provider_extension/metrics_util_unittest.mm
+++ b/ios/chrome/credential_provider_extension/metrics_util_unittest.mm
@@ -14,8 +14,8 @@
 
 namespace credential_provider_extension {
 
-NSString* kMetric1 = @"CpeMetricTest1";
-NSString* kMetric2 = @"CpeMetricTest2";
+NSString* const kMetric1 = @"CpeMetricTest1";
+NSString* const kMetric2 = @"CpeMetricTest2";
 
 void RemoveMetricForKey(NSString* key) {
   NSUserDefaults* sharedDefaults = app_group::GetGroupUserDefaults();
diff --git a/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm
index 829398b6..21098fcb 100644
--- a/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm
+++ b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm
@@ -24,7 +24,7 @@
 // view.
 const CGFloat kTableViewTopSpace = 14;
 
-NSString* kCellIdentifier = @"cdvcCell";
+NSString* const kCellIdentifier = @"cdvcCell";
 
 NSString* const kMaskedPassword = @"••••••••";
 
diff --git a/ios/chrome/credential_provider_extension/ui/credential_list_view_controller.mm b/ios/chrome/credential_provider_extension/ui/credential_list_view_controller.mm
index 0d87dfd1..9858f8a 100644
--- a/ios/chrome/credential_provider_extension/ui/credential_list_view_controller.mm
+++ b/ios/chrome/credential_provider_extension/ui/credential_list_view_controller.mm
@@ -24,9 +24,9 @@
 namespace {
 
 // Reuse Identifiers for table views.
-NSString* kHeaderIdentifier = @"clvcHeader";
-NSString* kCredentialCellIdentifier = @"clvcCredentialCell";
-NSString* kNewPasswordCellIdentifier = @"clvcNewPasswordCell";
+NSString* const kHeaderIdentifier = @"clvcHeader";
+NSString* const kCredentialCellIdentifier = @"clvcCredentialCell";
+NSString* const kNewPasswordCellIdentifier = @"clvcNewPasswordCell";
 
 const CGFloat kNewCredentialHeaderHeight = 35;
 // Add extra space to offset the top of the table view from the search bar.
diff --git a/ios/chrome/credential_provider_extension/ui/tooltip_view.mm b/ios/chrome/credential_provider_extension/ui/tooltip_view.mm
index c750762e..b03998b 100644
--- a/ios/chrome/credential_provider_extension/ui/tooltip_view.mm
+++ b/ios/chrome/credential_provider_extension/ui/tooltip_view.mm
@@ -9,12 +9,12 @@
 
 namespace {
 
-CGFloat kTooltipTailHeight = 8;
-CGFloat kTooltipTailWidth = 16;
-CGFloat kTooltipHorizontalPadding = 16.0f;
-CGFloat kTooltipVerticalPadding = 10.0f;
-CGFloat kTooltipCornerRadius = 8.0f;
-CGFloat kTooltipFadeInTime = 0.2f;
+constexpr CGFloat kTooltipTailHeight = 8;
+constexpr CGFloat kTooltipTailWidth = 16;
+constexpr CGFloat kTooltipHorizontalPadding = 16.0f;
+constexpr CGFloat kTooltipVerticalPadding = 10.0f;
+constexpr CGFloat kTooltipCornerRadius = 8.0f;
+constexpr CGFloat kTooltipFadeInTime = 0.2f;
 
 }  // namespace
 
diff --git a/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm b/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm
index 8f6fd56..17d1535 100644
--- a/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm
+++ b/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm
@@ -68,7 +68,7 @@
   return touch_path;
 }
 
-NSString* kChromeActionsErrorDomain = @"ChromeActionsError";
+NSString* const kChromeActionsErrorDomain = @"ChromeActionsError";
 
 }  // namespace
 
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey.mm b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
index 3f8b9b2..5a28dfd 100644
--- a/ios/chrome/test/earl_grey/chrome_earl_grey.mm
+++ b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
@@ -43,7 +43,7 @@
 namespace {
 
 // Accessibility ID of the Activity menu.
-NSString* kActivityMenuIdentifier = @"ActivityListView";
+NSString* const kActivityMenuIdentifier = @"ActivityListView";
 
 NSString* const kWaitForPageToStartLoadingError = @"Page did not start to load";
 NSString* const kWaitForPageToFinishLoadingError =
diff --git a/ios/components/credential_provider_extension/password_util_unittest.mm b/ios/components/credential_provider_extension/password_util_unittest.mm
index f276508da..cd39d4a 100644
--- a/ios/components/credential_provider_extension/password_util_unittest.mm
+++ b/ios/components/credential_provider_extension/password_util_unittest.mm
@@ -15,17 +15,17 @@
 
 namespace credential_provider_extension {
 
-NSString* kCredentialKey1 = @"key1";
-NSString* kCredentialKey2 = @"key2";
+NSString* const kCredentialKey1 = @"key1";
+NSString* const kCredentialKey2 = @"key2";
 
-NSString* kAccountInfoEmail1 = @"peter.parker@gmail.com";
-NSString* kAccountInfoEmail2 = @"mary.jane@gmail.com";
-NSString* kAccountInfoGaia1 = @"123456789";
-NSString* kAccountInfoGaia2 = @"987654321";
-NSString* kCredentialPassword1 = @"pa55word1";
-NSString* kCredentialPassword2 = @"p4ssw0rd2";
+NSString* const kAccountInfoEmail1 = @"peter.parker@gmail.com";
+NSString* const kAccountInfoEmail2 = @"mary.jane@gmail.com";
+NSString* const kAccountInfoGaia1 = @"123456789";
+NSString* const kAccountInfoGaia2 = @"987654321";
+NSString* const kCredentialPassword1 = @"pa55word1";
+NSString* const kCredentialPassword2 = @"p4ssw0rd2";
 
-NSString* kTestPrefix = @"com.google.common.SSO.KeychainTest.";
+NSString* const kTestPrefix = @"com.google.common.SSO.KeychainTest.";
 
 NSString* KeyWithPrefix(NSString* key) {
   return [NSString stringWithFormat:@"%@%@", kTestPrefix, key];
diff --git a/ios/web/js_image_transcoder/java_script_image_transcoder.mm b/ios/web/js_image_transcoder/java_script_image_transcoder.mm
index b04b3728..ecb935b 100644
--- a/ios/web/js_image_transcoder/java_script_image_transcoder.mm
+++ b/ios/web/js_image_transcoder/java_script_image_transcoder.mm
@@ -15,7 +15,7 @@
 namespace {
 
 // Filename of the script to transcode images.
-NSString* kTranscodeImageScriptFileName = @"transcode_image";
+NSString* const kTranscodeImageScriptFileName = @"transcode_image";
 
 }  // namespace
 
diff --git a/ios/web/public/js_messaging/utils_javascript_test.mm b/ios/web/public/js_messaging/utils_javascript_test.mm
index cd1904cd..da17a868 100644
--- a/ios/web/public/js_messaging/utils_javascript_test.mm
+++ b/ios/web/public/js_messaging/utils_javascript_test.mm
@@ -12,7 +12,8 @@
 #import "testing/gtest_mac.h"
 #import "url/gurl.h"
 
-NSString* kUtilsSampleMessageHandlerName = @"UtilsSampleMessageHandlerName";
+NSString* const kUtilsSampleMessageHandlerName =
+    @"UtilsSampleMessageHandlerName";
 
 // A WKScriptMessageHandler which stores the last received WKScriptMessage;
 @interface FakeScriptMessageHandler : NSObject <WKScriptMessageHandler>
diff --git a/ios/web/public/session/BUILD.gn b/ios/web/public/session/BUILD.gn
index 56c8bd3..a6554a0 100644
--- a/ios/web/public/session/BUILD.gn
+++ b/ios/web/public/session/BUILD.gn
@@ -14,7 +14,6 @@
     "//url",
   ]
   sources = [
-    "crw_session_certificate_policy_cache_storage.h",
     "crw_session_user_data.h",
     "serializable_user_data_manager.h",
     "session_certificate_policy_cache.h",
diff --git a/ios/web/public/session/crw_session_certificate_policy_cache_storage.h b/ios/web/public/session/crw_session_certificate_policy_cache_storage.h
deleted file mode 100644
index 4517ddc..0000000
--- a/ios/web/public/session/crw_session_certificate_policy_cache_storage.h
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2017 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_WEB_PUBLIC_SESSION_CRW_SESSION_CERTIFICATE_POLICY_CACHE_STORAGE_H_
-#define IOS_WEB_PUBLIC_SESSION_CRW_SESSION_CERTIFICATE_POLICY_CACHE_STORAGE_H_
-
-#import <Foundation/Foundation.h>
-
-#include "base/memory/scoped_refptr.h"
-#include "net/cert/cert_status_flags.h"
-
-namespace net {
-class X509Certificate;
-}
-
-#pragma mark - CRWSessionCertificateStorage
-
-namespace web {
-namespace proto {
-class CertificateStorage;
-class CertificatesCacheStorage;
-}  // namespace proto
-
-// Serialization keys used in CRWSessionCertificateStorage's NSCoding
-// implementation.
-extern NSString* const kCertificateSerializationKey;
-extern NSString* const kHostSerializationKey;
-extern NSString* const kStatusSerializationKey;
-
-// Total bytes serialized during CRWSessionCertificateStorage encoding since the
-// uptime.
-size_t GetCertPolicyBytesEncoded();
-
-}  // namespace web
-
-// A serializable representation of a certificate.
-@interface CRWSessionCertificateStorage : NSObject <NSCoding>
-
-// Designated initializer.
-- (instancetype)initWithCertificate:(scoped_refptr<net::X509Certificate>)cert
-                               host:(const std::string&)host
-                             status:(net::CertStatus)status
-    NS_DESIGNATED_INITIALIZER;
-- (instancetype)init NS_UNAVAILABLE;
-
-// Convenience initializer that creates an instance from proto representation.
-- (instancetype)initWithProto:(const web::proto::CertificateStorage&)storage;
-
-// Serializes the CRWSessionCertificateStorage into `storage`.
-- (void)serializeToProto:(web::proto::CertificateStorage&)storage;
-
-// The certificate represented by this storage.
-@property(nonatomic, readonly) net::X509Certificate* certificate;
-// The hostname of the page that issued `certificate`.
-@property(nonatomic, readonly) std::string& host;
-// The allowance chosen for the certificate.
-@property(nonatomic, readonly) net::CertStatus status;
-
-@end
-
-#pragma mark - CRWSessionCertificatePolicyCacheStorage
-
-namespace web {
-// Serialization key used in CRWSessionCertificatePolicyCacheStorage's NSCoding
-// implementation.
-extern NSString* const kCertificateStoragesKey;
-}  // namespace web
-
-// A serializable representation of a list of allowed certificates.
-@interface CRWSessionCertificatePolicyCacheStorage : NSObject <NSCoding>
-
-// Convenience initializer that creates an instance from proto representation.
-- (instancetype)initWithProto:
-    (const web::proto::CertificatesCacheStorage&)storage;
-
-// Serializes the CRWSessionCertificatePolicyCacheStorage into `storage`.
-- (void)serializeToProto:(web::proto::CertificatesCacheStorage&)storage;
-
-// The certificate policy storages for this session.
-@property(nonatomic, strong)
-    NSSet<CRWSessionCertificateStorage*>* certificateStorages;
-
-@end
-
-#endif  // IOS_WEB_PUBLIC_SESSION_CRW_SESSION_CERTIFICATE_POLICY_CACHE_STORAGE_H_
diff --git a/ios/web/session/BUILD.gn b/ios/web/session/BUILD.gn
index 8b0cbe7e..badd325 100644
--- a/ios/web/session/BUILD.gn
+++ b/ios/web/session/BUILD.gn
@@ -15,7 +15,6 @@
     "//net",
   ]
   sources = [
-    "crw_session_certificate_policy_cache_storage.mm",
     "crw_session_user_data.mm",
     "session_certificate.cc",
     "session_certificate.h",
@@ -48,7 +47,6 @@
     "//testing/gtest",
   ]
   sources = [
-    "crw_session_certificate_policy_cache_storage_unittest.mm",
     "serializable_user_data_manager_unittest.mm",
     "session_certificate_policy_cache_impl_unittest.mm",
   ]
diff --git a/ios/web/session/crw_session_certificate_policy_cache_storage.mm b/ios/web/session/crw_session_certificate_policy_cache_storage.mm
deleted file mode 100644
index 1816519..0000000
--- a/ios/web/session/crw_session_certificate_policy_cache_storage.mm
+++ /dev/null
@@ -1,299 +0,0 @@
-// Copyright 2017 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40285824): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
-#import "ios/web/public/session/crw_session_certificate_policy_cache_storage.h"
-
-#import <string_view>
-
-#import "base/apple/foundation_util.h"
-#import "base/strings/sys_string_conversions.h"
-#import "ios/web/public/session/proto/session.pb.h"
-#import "ios/web/session/hash_util.h"
-#import "net/base/hash_value.h"
-#import "net/cert/x509_certificate.h"
-#import "net/cert/x509_util.h"
-
-namespace {
-
-// Total bytes serialized during CRWSessionCertificateStorage encoding since the
-// uptime.
-static size_t gBytesEncoded = 0;
-
-// The deprecated serialization technique serialized each certificate policy as
-// an NSArray, where the necessary information is stored at the following
-// indices.
-typedef NS_ENUM(NSInteger, DeprecatedSerializationIndices) {
-  CertificateDataIndex = 0,
-  HostStringIndex,
-  StatusIndex,
-  DeprecatedSerializationIndexCount,
-};
-
-// Converts `certificate` to NSData for serialization.
-NSData* CertificateToNSData(net::X509Certificate* certificate) {
-  std::string_view cert_string =
-      net::x509_util::CryptoBufferAsStringPiece(certificate->cert_buffer());
-  return [NSData dataWithBytes:cert_string.data() length:cert_string.length()];
-}
-
-// Converts serialized NSData to a certificate.
-scoped_refptr<net::X509Certificate> NSDataToCertificate(NSData* data) {
-  return net::X509Certificate::CreateFromBytes(
-      base::span(static_cast<const uint8_t*>(data.bytes), size_t{data.length}));
-}
-
-}  // namespace
-
-namespace web {
-
-// CRWSessionCertificateStorage serialization keys.
-NSString* const kCertificateSerializationKey = @"CertificateSerializationKey";
-NSString* const kHostSerializationKey = @"HostSerializationKey";
-NSString* const kStatusSerializationKey = @"StatusSerializationKey";
-
-// CRWSessionCertificatePolicyCacheStorage serialization keys.
-NSString* const kCertificateStoragesKey = @"kCertificateStoragesKey";
-NSString* const kCertificateStoragesDeprecatedKey = @"allowedCertificates";
-
-size_t GetCertPolicyBytesEncoded() {
-  return gBytesEncoded;
-}
-
-}  // namespace web
-
-#pragma mark - CRWSessionCertificateStorage
-
-@interface CRWSessionCertificateStorage () {
-  // Backing objects for properties of the same name.
-  scoped_refptr<net::X509Certificate> _certificate;
-  std::string _host;
-}
-
-// Initializes the CRWSessionCertificateStorage using decoded values.  Can
-// return nil if the parameters cannot be converted correctly to a cert storage.
-- (instancetype)initWithCertData:(NSData*)certData
-                        hostName:(NSString*)hostName
-                      certStatus:(NSNumber*)certStatus;
-
-// Initializes the CRWSessionCertificateStorage using the deprecated
-// serialization technique.  See DeprecatedSerializationIndices above for more
-// details.
-- (instancetype)initWithDeprecatedSerialization:(NSArray*)serialization;
-
-@end
-
-@implementation CRWSessionCertificateStorage
-
-@synthesize host = _host;
-@synthesize status = _status;
-
-- (instancetype)initWithCertificate:(scoped_refptr<net::X509Certificate>)cert
-                               host:(const std::string&)host
-                             status:(net::CertStatus)status {
-  DCHECK(cert);
-  DCHECK(host.length());
-  if ((self = [super init])) {
-    _certificate = cert;
-    _host = host;
-    _status = status;
-  }
-  return self;
-}
-
-- (instancetype)initWithProto:(const web::proto::CertificateStorage&)storage {
-  const std::string& certString = storage.certificate();
-  scoped_refptr<net::X509Certificate> cert =
-      net::X509Certificate::CreateFromBytes(base::as_byte_span(certString));
-
-  // Return nil if the cert cannot be decoded or the host is empty.
-  if (!cert || storage.host().empty()) {
-    return nil;
-  }
-
-  return [self initWithCertificate:cert
-                              host:storage.host()
-                            status:storage.status()];
-}
-
-- (void)serializeToProto:(web::proto::CertificateStorage&)storage {
-  const std::string_view certString =
-      net::x509_util::CryptoBufferAsStringPiece(_certificate->cert_buffer());
-
-  storage.set_certificate(certString.data(), certString.size());
-  storage.set_host(_host);
-  storage.set_status(_status);
-}
-
-#pragma mark NSObject
-
-- (NSUInteger)hash {
-  return web::session::ComputeHash(_certificate, _host, _status);
-}
-
-- (BOOL)isEqual:(NSObject*)object {
-  CRWSessionCertificateStorage* other =
-      base::apple::ObjCCast<CRWSessionCertificateStorage>(object);
-
-  return [other cr_isEqualSameClass:self];
-}
-
-#pragma mark Accessors
-
-- (net::X509Certificate*)certificate {
-  return _certificate.get();
-}
-
-#pragma mark NSCoding
-
-- (instancetype)initWithCoder:(NSCoder*)aDecoder {
-  NSData* certData =
-      [aDecoder decodeObjectForKey:web::kCertificateSerializationKey];
-  NSString* hostName = [aDecoder decodeObjectForKey:web::kHostSerializationKey];
-  NSNumber* certStatus =
-      [aDecoder decodeObjectForKey:web::kStatusSerializationKey];
-  return [self initWithCertData:certData
-                       hostName:hostName
-                     certStatus:certStatus];
-}
-
-- (void)encodeWithCoder:(NSCoder*)aCoder {
-  NSData* certData = CertificateToNSData(_certificate.get());
-  [aCoder encodeObject:certData forKey:web::kCertificateSerializationKey];
-  [aCoder encodeObject:base::SysUTF8ToNSString(_host)
-                forKey:web::kHostSerializationKey];
-  [aCoder encodeObject:@(_status) forKey:web::kStatusSerializationKey];
-
-  gBytesEncoded += certData.length + _host.size() + sizeof(_status);
-}
-
-#pragma mark Private
-
-- (instancetype)initWithCertData:(NSData*)certData
-                        hostName:(NSString*)hostName
-                      certStatus:(NSNumber*)certStatus {
-  scoped_refptr<net::X509Certificate> cert = NSDataToCertificate(certData);
-  std::string host = base::SysNSStringToUTF8(hostName);
-  if (!cert || !host.length() || !certStatus) {
-    return nil;
-  }
-  net::CertStatus status = certStatus.unsignedIntegerValue;
-  return [self initWithCertificate:cert host:host status:status];
-}
-
-- (instancetype)initWithDeprecatedSerialization:(NSArray*)serialization {
-  if (serialization.count != DeprecatedSerializationIndexCount) {
-    return nil;
-  }
-  return [self initWithCertData:serialization[CertificateDataIndex]
-                       hostName:serialization[HostStringIndex]
-                     certStatus:serialization[StatusIndex]];
-}
-
-- (BOOL)cr_isEqualSameClass:(CRWSessionCertificateStorage*)other {
-  if (_host != other.host) {
-    return NO;
-  }
-
-  if (_status != other.status) {
-    return NO;
-  }
-
-  return net::x509_util::CryptoBufferEqual(_certificate->cert_buffer(),
-                                           other.certificate->cert_buffer());
-}
-
-@end
-
-#pragma mark - CRWSessionCertificatePolicyCacheStorage
-
-@implementation CRWSessionCertificatePolicyCacheStorage
-
-@synthesize certificateStorages = _certificateStorages;
-
-- (instancetype)initWithProto:
-    (const web::proto::CertificatesCacheStorage&)storage {
-  if ((self = [super init])) {
-    NSMutableSet<CRWSessionCertificateStorage*>* certificates =
-        [[NSMutableSet alloc] initWithCapacity:storage.certs_size()];
-    for (const web::proto::CertificateStorage& certStorage : storage.certs()) {
-      CRWSessionCertificateStorage* cert =
-          [[CRWSessionCertificateStorage alloc] initWithProto:certStorage];
-
-      if (cert) {
-        [certificates addObject:cert];
-      }
-    }
-    _certificateStorages = [certificates copy];
-  }
-  return self;
-}
-
-- (void)serializeToProto:(web::proto::CertificatesCacheStorage&)storage {
-  for (CRWSessionCertificateStorage* cert in _certificateStorages) {
-    [cert serializeToProto:*storage.add_certs()];
-  }
-}
-
-#pragma mark NSObject
-
-- (BOOL)isEqual:(NSObject*)object {
-  CRWSessionCertificatePolicyCacheStorage* other =
-      base::apple::ObjCCast<CRWSessionCertificatePolicyCacheStorage>(object);
-
-  return [other cr_isEqualSameClass:self];
-}
-
-#pragma mark NSCoding
-
-- (instancetype)initWithCoder:(NSCoder*)aDecoder {
-  if ((self = [super init])) {
-    _certificateStorages =
-        [aDecoder decodeObjectForKey:web::kCertificateStoragesKey];
-    if (!_certificateStorages.count) {
-      // Attempt to use the deprecated serialization if none were decoded.
-      NSMutableSet* deprecatedSerializations =
-          [aDecoder decodeObjectForKey:web::kCertificateStoragesDeprecatedKey];
-      NSMutableSet* certificateStorages = [[NSMutableSet alloc]
-          initWithCapacity:deprecatedSerializations.count];
-      for (NSArray* serialiazation in deprecatedSerializations) {
-        CRWSessionCertificateStorage* certificatePolicyStorage =
-            [[CRWSessionCertificateStorage alloc]
-                initWithDeprecatedSerialization:serialiazation];
-        if (certificatePolicyStorage) {
-          [certificateStorages addObject:certificatePolicyStorage];
-        }
-      }
-      _certificateStorages = certificateStorages;
-    }
-  }
-  return self;
-}
-
-- (void)encodeWithCoder:(NSCoder*)aCoder {
-  [aCoder encodeObject:self.certificateStorages
-                forKey:web::kCertificateStoragesKey];
-}
-
-#pragma mark Private
-
-- (BOOL)cr_isEqualSameClass:(CRWSessionCertificatePolicyCacheStorage*)other {
-  if (_certificateStorages.count != other.certificateStorages.count) {
-    return NO;
-  }
-
-  for (CRWSessionCertificateStorage* cert in other.certificateStorages) {
-    if (![_certificateStorages containsObject:cert]) {
-      return NO;
-    }
-  }
-
-  return YES;
-}
-
-@end
diff --git a/ios/web/session/crw_session_certificate_policy_cache_storage_unittest.mm b/ios/web/session/crw_session_certificate_policy_cache_storage_unittest.mm
deleted file mode 100644
index c34170b..0000000
--- a/ios/web/session/crw_session_certificate_policy_cache_storage_unittest.mm
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2017 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "ios/web/public/session/crw_session_certificate_policy_cache_storage.h"
-
-#import "ios/web/public/session/proto/session.pb.h"
-#import "net/cert/x509_certificate.h"
-#import "net/cert/x509_util.h"
-#import "net/test/cert_test_util.h"
-#import "net/test/test_data_directory.h"
-#import "testing/gtest/include/gtest/gtest.h"
-#import "testing/gtest_mac.h"
-#import "testing/platform_test.h"
-
-class CRWSessionCertificatePolicyCacheStorageTest : public PlatformTest {
- protected:
-  CRWSessionCertificatePolicyCacheStorageTest()
-      : cache_storage_([[CRWSessionCertificatePolicyCacheStorage alloc] init]) {
-    // Set up `cache_storage_`.
-    scoped_refptr<net::X509Certificate> cert =
-        net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
-    NSMutableSet* certs = [[NSMutableSet alloc] init];
-    [certs addObject:[[CRWSessionCertificateStorage alloc]
-                         initWithCertificate:cert
-                                        host:"test1.com"
-                                      status:net::CERT_STATUS_REVOKED]];
-    [cache_storage_ setCertificateStorages:certs];
-  }
-
- protected:
-  CRWSessionCertificatePolicyCacheStorage* cache_storage_;
-};
-
-// Tests that unarchiving CRWSessionCertificatePolicyCacheStorage data results
-// in an equivalent storage.
-TEST_F(CRWSessionCertificatePolicyCacheStorageTest, EncodeDecode) {
-  NSData* data = [NSKeyedArchiver archivedDataWithRootObject:cache_storage_
-                                       requiringSecureCoding:NO
-                                                       error:nil];
-  NSKeyedUnarchiver* unarchiver =
-      [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:nil];
-  unarchiver.requiresSecureCoding = NO;
-  id decoded = [unarchiver decodeObjectForKey:NSKeyedArchiveRootObjectKey];
-  EXPECT_NSEQ(cache_storage_, decoded);
-}
-
-// Tests that converting CRWSessionCertificatePolicyCacheStorage to proto and
-// back results in an equivalent storage.
-TEST_F(CRWSessionCertificatePolicyCacheStorageTest, EncodeDecodeToProto) {
-  web::proto::CertificatesCacheStorage storage;
-  [cache_storage_ serializeToProto:storage];
-
-  CRWSessionCertificatePolicyCacheStorage* decoded =
-      [[CRWSessionCertificatePolicyCacheStorage alloc] initWithProto:storage];
-
-  EXPECT_NSEQ(cache_storage_, decoded);
-}
-
-using CRWSessionCertificateStorageTest = PlatformTest;
-
-// Tests that unarchiving a CRWSessionCertificateStorage returns nil if the
-// certificate data does not correctly decode to a certificate.
-TEST_F(CRWSessionCertificateStorageTest, InvalidCertData) {
-  NSKeyedArchiver* archiver =
-      [[NSKeyedArchiver alloc] initRequiringSecureCoding:NO];
-  [archiver encodeObject:[@"not a  cert" dataUsingEncoding:NSUTF8StringEncoding]
-                  forKey:web::kCertificateSerializationKey];
-  [archiver encodeObject:@"host" forKey:web::kHostSerializationKey];
-  [archiver encodeObject:@(net::CERT_STATUS_INVALID)
-                  forKey:web::kStatusSerializationKey];
-  [archiver finishEncoding];
-  NSData* data = [archiver encodedData];
-
-  NSKeyedUnarchiver* unarchiver =
-      [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:nil];
-  unarchiver.requiresSecureCoding = NO;
-  id decoded = [unarchiver decodeObjectForKey:NSKeyedArchiveRootObjectKey];
-  EXPECT_FALSE(decoded);
-}
-
-// Tests that unarchiving a CRWSessionCertificateStorage from proto returns nil
-// if the certificate data does not correctly decode to a certificate.
-TEST_F(CRWSessionCertificateStorageTest, InvalidCertDataFromProto) {
-  web::proto::CertificateStorage storage;
-  storage.set_certificate("not a  cert");
-  storage.set_host("host");
-  storage.set_status(net::CERT_STATUS_INVALID);
-
-  CRWSessionCertificateStorage* decoded =
-      [[CRWSessionCertificateStorage alloc] initWithProto:storage];
-  EXPECT_FALSE(decoded);
-}
diff --git a/ios/web/web_state/bad_ssl_response_inttest.mm b/ios/web/web_state/bad_ssl_response_inttest.mm
index 337499e..35063a7 100644
--- a/ios/web/web_state/bad_ssl_response_inttest.mm
+++ b/ios/web/web_state/bad_ssl_response_inttest.mm
@@ -11,7 +11,6 @@
 #import "ios/web/public/security/certificate_policy_cache.h"
 #import "ios/web/public/security/security_style.h"
 #import "ios/web/public/security/ssl_status.h"
-#import "ios/web/public/session/crw_session_certificate_policy_cache_storage.h"
 #import "ios/web/public/session/session_certificate_policy_cache.h"
 #import "ios/web/public/test/error_test_util.h"
 #import "ios/web/public/test/fakes/fake_web_client.h"
diff --git a/ios/web/webui/url_data_manager_ios_backend.mm b/ios/web/webui/url_data_manager_ios_backend.mm
index a844947..d439536 100644
--- a/ios/web/webui/url_data_manager_ios_backend.mm
+++ b/ios/web/webui/url_data_manager_ios_backend.mm
@@ -113,7 +113,7 @@
   // Returns a span that cover at most `count` bytes.
   base::span<uint8_t> span(size_t count) {
     CHECK(is_valid());
-    return buf_->span().first(std::min(buf_size_, count));
+    return buf_->first(std::min(buf_size_, count));
   }
 
  private:
diff --git a/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.h b/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.h
index e5b135f6..9a4ec22c 100644
--- a/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.h
+++ b/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.h
@@ -143,6 +143,7 @@
       base::OnceClosure cancel_mandatory_reauth_callback,
       base::RepeatingClosure close_mandatory_reauth_callback) override;
   void ShowMandatoryReauthOptInConfirmation() override;
+  bool IsAutofillPaymentMethodsEnabled() const final;
   IbanManager* GetIbanManager() override;
   IbanAccessManager* GetIbanAccessManager() override;
   MerchantPromoCodeManager* GetMerchantPromoCodeManager() override;
diff --git a/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.mm b/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.mm
index b2f58fc..70c6b6c 100644
--- a/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.mm
+++ b/ios/web_view/internal/autofill/ios_web_view_payments_autofill_client.mm
@@ -25,6 +25,7 @@
 #import "components/autofill/core/browser/ui/payments/bnpl_tos_controller.h"
 #import "components/autofill/core/browser/ui/payments/card_unmask_otp_input_dialog_controller.h"
 #import "components/autofill/core/browser/ui/payments/card_unmask_prompt_controller.h"
+#import "components/autofill/core/common/autofill_prefs.h"
 #import "components/prefs/pref_service.h"
 #import "ios/web/public/web_state.h"
 #import "ios/web_view/internal/autofill/cwv_autofill_prefs.h"
@@ -332,6 +333,10 @@
 
 void IOSWebViewPaymentsAutofillClient::ShowMandatoryReauthOptInConfirmation() {}
 
+bool IOSWebViewPaymentsAutofillClient::IsAutofillPaymentMethodsEnabled() const {
+  return autofill::prefs::IsAutofillPaymentMethodsEnabled(GetPrefService());
+}
+
 IbanManager* IOSWebViewPaymentsAutofillClient::GetIbanManager() {
   return nullptr;
 }
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
index d311d97..879079a3 100644
--- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
+++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
@@ -136,7 +136,6 @@
   void HideAutofillSuggestions(SuggestionHidingReason reason) override;
   bool IsAutofillEnabled() const override;
   bool IsAutofillProfileEnabled() const override;
-  bool IsAutofillPaymentMethodsEnabled() const override;
   bool IsWalletStorageEnabled() const override;
   bool IsAutocompleteEnabled() const override;
   bool IsPasswordManagerEnabled() const override;
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
index 573ced9..25ae968 100644
--- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
+++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
@@ -249,17 +249,15 @@
 }
 
 bool WebViewAutofillClientIOS::IsAutofillEnabled() const {
-  return IsAutofillProfileEnabled() || IsAutofillPaymentMethodsEnabled();
+  return IsAutofillProfileEnabled() ||
+         AutofillClient::GetPaymentsAutofillClient()
+             ->IsAutofillPaymentMethodsEnabled();
 }
 
 bool WebViewAutofillClientIOS::IsAutofillProfileEnabled() const {
   return prefs::IsAutofillProfileEnabled(GetPrefs());
 }
 
-bool WebViewAutofillClientIOS::IsAutofillPaymentMethodsEnabled() const {
-  return prefs::IsAutofillPaymentMethodsEnabled(GetPrefs());
-}
-
 bool WebViewAutofillClientIOS::IsWalletStorageEnabled() const {
   return false;
 }
diff --git a/ios/web_view/internal/web_view_web_main_delegate.mm b/ios/web_view/internal/web_view_web_main_delegate.mm
index 830b529..7c57ab2f 100644
--- a/ios/web_view/internal/web_view_web_main_delegate.mm
+++ b/ios/web_view/internal/web_view_web_main_delegate.mm
@@ -7,6 +7,7 @@
 #import "base/apple/bundle_locations.h"
 #import "base/base_paths.h"
 #import "base/logging.h"
+#import "base/logging/logging_settings.h"
 #import "components/component_updater/component_updater_paths.h"
 
 // Dummy class used to locate the containing NSBundle.
diff --git a/ios_internal b/ios_internal
index 239ab09d..f357f16 160000
--- a/ios_internal
+++ b/ios_internal
@@ -1 +1 @@
-Subproject commit 239ab09d80330295888bb4697c92aeba6f8b92a1
+Subproject commit f357f16bf16badcca979a7e0165fac286835dd5e
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc
index 550a697b..7cb2003 100644
--- a/media/audio/mac/audio_manager_mac.cc
+++ b/media/audio/mac/audio_manager_mac.cc
@@ -469,9 +469,6 @@
   return true;
 }
 
-// TODO(crbug.com/447640763): Remove after M145 if nothing explodes.
-BASE_FEATURE(kAudioPowerMonitoring, base::FEATURE_DISABLED_BY_DEFAULT);
-
 class AudioManagerMac::AudioPowerObserver : public base::PowerSuspendObserver {
  public:
   AudioPowerObserver()
@@ -507,10 +504,6 @@
 
   bool ShouldDeferStreamStart() const {
     DCHECK(thread_checker_.CalledOnValidThread());
-    if (!base::FeatureList::IsEnabled(kAudioPowerMonitoring)) {
-      return false;
-    }
-
     // Start() should be deferred if the system is in the middle of a suspend or
     // has recently started the process of resuming.
     return is_suspending_ || base::TimeTicks::Now() < earliest_start_time_;
diff --git a/media/audio/mac/audio_manager_mac.h b/media/audio/mac/audio_manager_mac.h
index a232140..cc7d700 100644
--- a/media/audio/mac/audio_manager_mac.h
+++ b/media/audio/mac/audio_manager_mac.h
@@ -144,8 +144,8 @@
   // Streams should consult ShouldDeferStreamStart() and if true check the value
   // again after |kStartDelayInSecsForPowerEvents| has elapsed. If false, the
   // stream may be started immediately.
-  // TODO(henrika): track UMA statistics related to defer start to come up with
-  // a suitable delay value.
+  //
+  // As of Nov 2025, this is still helpful, see https://crbug.com/447640763.
   enum { kStartDelayInSecsForPowerEvents = 5 };
   bool ShouldDeferStreamStart() const override;
 
diff --git a/media/base/audio_latency.cc b/media/base/audio_latency.cc
index d0c1ec84..ba1d436 100644
--- a/media/base/audio_latency.cc
+++ b/media/base/audio_latency.cc
@@ -7,7 +7,9 @@
 #include <stdint.h>
 
 #include <algorithm>
+#include <bit>
 #include <cmath>
+#include <numeric>
 
 #include "base/check_op.h"
 #include "base/logging.h"
@@ -26,43 +28,6 @@
 
 namespace media {
 
-namespace {
-
-#if !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_FUCHSIA)
-// Taken from "Bit Twiddling Hacks"
-// http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
-uint32_t RoundUpToPowerOfTwo(uint32_t v) {
-  v--;
-  v |= v >> 1;
-  v |= v >> 2;
-  v |= v >> 4;
-  v |= v >> 8;
-  v |= v >> 16;
-  v++;
-  return v;
-}
-#endif
-
-#if BUILDFLAG(IS_ANDROID)
-// WebAudio renderer's quantum size (frames per callback) that is used for
-// calculating the "interactive" buffer size.
-// TODO(crbug.com/40637820): This number needs to be passed down from Blink when
-// user-selectable render quantum size is implemented.
-const int kWebAudioRenderQuantumSize = 128;
-
-// From media/renderers/paint_canvas_video_renderer.cc. To calculate the optimum
-// buffer size for Pixel 3/4/5 devices, which has a HW buffer size of 96 frames.
-int GCD(int a, int b) {
-  return a == 0 ? b : GCD(b % a, a);
-}
-
-int LCM(int a, int b) {
-  return a / GCD(a, b) * b;
-}
-#endif
-
-}  // namespace
-
 // static
 bool AudioLatency::IsResamplingPassthroughSupported(Type type) {
 #if BUILDFLAG(IS_CHROMEOS)
@@ -88,7 +53,8 @@
 #if BUILDFLAG(USE_CRAS)
   // Use 80ms rounded to a power of 2.
   const double eighty_ms_size = 8.0 * sample_rate / 100;
-  const int high_latency_buffer_size = RoundUpToPowerOfTwo(eighty_ms_size);
+  const int high_latency_buffer_size =
+      std::bit_ceil(static_cast<uint32_t>(std::round(eighty_ms_size)));
 #elif BUILDFLAG(IS_FUCHSIA)
   // Use 80ms buffers. Doesn't need to be aligned to power of 2, but it should
   // be a multiple of the scheduling period used for audio threads.
@@ -120,7 +86,8 @@
   // On Linux, the minimum hardware buffer size is 512, so the lower calculated
   // values are unused.  OSX may have a value as low as 128.
   const double twenty_ms_size = 2.0 * sample_rate / 100;
-  const int high_latency_buffer_size = RoundUpToPowerOfTwo(twenty_ms_size);
+  const int high_latency_buffer_size =
+      std::bit_ceil(static_cast<uint32_t>(std::round(twenty_ms_size)));
 #endif
 
   return std::max(preferred_buffer_size, high_latency_buffer_size);
@@ -174,6 +141,12 @@
   // information out.
   LOG(INFO) << "audioHardwareBufferSize = " << hardware_buffer_size;
 
+  // WebAudio renderer's quantum size (frames per callback) that is used for
+  // calculating the "interactive" buffer size.
+  // TODO(crbug.com/40637820): This number needs to be passed down from Blink
+  // when user-selectable render quantum size is implemented.
+  const int kWebAudioRenderQuantumSize = 128;
+
   if (hardware_buffer_size >= kWebAudioRenderQuantumSize)
     return hardware_buffer_size;
 
@@ -181,9 +154,9 @@
   // compute LCM to avoid glitches and regulate the workload per callback.
   // (e.g. 96 vs 128 -> 384) Also cap the buffer size to 4 render quanta
   // (512 frames ~= 10ms at 48K) if LCM goes beyond interactive latency range.
-  int sensible_buffer_size = std::min(
-      LCM(hardware_buffer_size, kWebAudioRenderQuantumSize),
-      kWebAudioRenderQuantumSize * 4);
+  int sensible_buffer_size =
+      std::min(std::lcm(hardware_buffer_size, kWebAudioRenderQuantumSize),
+               kWebAudioRenderQuantumSize * 4);
 
   return sensible_buffer_size;
 #else
diff --git a/media/gpu/test/video_test_environment.cc b/media/gpu/test/video_test_environment.cc
index 7a36662..47ea0f8 100644
--- a/media/gpu/test/video_test_environment.cc
+++ b/media/gpu/test/video_test_environment.cc
@@ -4,6 +4,7 @@
 
 #include "media/gpu/test/video_test_environment.h"
 
+#include "base/logging/logging_settings.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/task_environment.h"
diff --git a/media/gpu/v4l2/test/v4l2_stateless_decoder.cc b/media/gpu/v4l2/test/v4l2_stateless_decoder.cc
index 14da4fd54..e6022fb 100644
--- a/media/gpu/v4l2/test/v4l2_stateless_decoder.cc
+++ b/media/gpu/v4l2/test/v4l2_stateless_decoder.cc
@@ -16,6 +16,7 @@
 #include "base/files/file_util.h"
 #include "base/files/memory_mapped_file.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
diff --git a/media/gpu/vaapi/test/decode.cc b/media/gpu/vaapi/test/decode.cc
index 3903447c..e271156 100644
--- a/media/gpu/vaapi/test/decode.cc
+++ b/media/gpu/vaapi/test/decode.cc
@@ -13,6 +13,7 @@
 #include "base/command_line.h"
 #include "base/files/memory_mapped_file.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
diff --git a/mojo/proxy/main.cc b/mojo/proxy/main.cc
index 201ad30..b9c2dcf 100644
--- a/mojo/proxy/main.cc
+++ b/mojo/proxy/main.cc
@@ -11,6 +11,7 @@
 #include "base/command_line.h"
 #include "base/files/scoped_file.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/mojo/public/cpp/base/BUILD.gn b/mojo/public/cpp/base/BUILD.gn
index 0e2b2fc..6d937efd 100644
--- a/mojo/public/cpp/base/BUILD.gn
+++ b/mojo/public/cpp/base/BUILD.gn
@@ -120,6 +120,8 @@
     "big_buffer_mojom_traits.h",
     "byte_count_mojom_traits.cc",
     "byte_count_mojom_traits.h",
+    "byte_size_mojom_traits.cc",
+    "byte_size_mojom_traits.h",
     "byte_string_mojom_traits.cc",
     "byte_string_mojom_traits.h",
     "file_info_mojom_traits.cc",
@@ -203,6 +205,7 @@
   sources = [
     "big_buffer_unittest.cc",
     "big_string_unittest.cc",
+    "byte_size_unittest.cc",
     "byte_string_unittest.cc",
     "file_path_unittest.cc",
     "file_unittest.cc",
diff --git a/mojo/public/cpp/base/byte_size_mojom_traits.cc b/mojo/public/cpp/base/byte_size_mojom_traits.cc
new file mode 100644
index 0000000..3587ab2
--- /dev/null
+++ b/mojo/public/cpp/base/byte_size_mojom_traits.cc
@@ -0,0 +1,34 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "mojo/public/cpp/base/byte_size_mojom_traits.h"
+
+#include "base/byte_size.h"
+
+namespace mojo {
+
+// static
+bool StructTraits<mojo_base::mojom::ByteSizeDataView, base::ByteSize>::Read(
+    mojo_base::mojom::ByteSizeDataView data,
+    base::ByteSize* byte_size) {
+  // ByteSize holds a uint64_t, but any value over max(int64_t) is invalid, so
+  // that every valid ByteSize can convert to ByteSizeDelta. The ByteSize
+  // constructor will CHECK if given an out-of-range value.
+  if (data.size() > base::ByteSize::Max().InBytes()) {
+    return false;
+  }
+  *byte_size = base::ByteSize(data.size());
+  return true;
+}
+
+// static
+bool StructTraits<
+    mojo_base::mojom::ByteSizeDeltaDataView,
+    base::ByteSizeDelta>::Read(mojo_base::mojom::ByteSizeDeltaDataView data,
+                               base::ByteSizeDelta* byte_size_delta) {
+  *byte_size_delta = base::ByteSizeDelta(data.delta());
+  return true;
+}
+
+}  // namespace mojo
diff --git a/mojo/public/cpp/base/byte_size_mojom_traits.h b/mojo/public/cpp/base/byte_size_mojom_traits.h
new file mode 100644
index 0000000..33fc700
--- /dev/null
+++ b/mojo/public/cpp/base/byte_size_mojom_traits.h
@@ -0,0 +1,36 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MOJO_PUBLIC_CPP_BASE_BYTE_SIZE_MOJOM_TRAITS_H_
+#define MOJO_PUBLIC_CPP_BASE_BYTE_SIZE_MOJOM_TRAITS_H_
+
+#include "base/byte_size.h"
+#include "base/component_export.h"
+#include "mojo/public/mojom/base/byte_size.mojom-shared.h"
+
+namespace mojo {
+
+template <>
+struct COMPONENT_EXPORT(MOJO_BASE_SHARED_TRAITS)
+    StructTraits<mojo_base::mojom::ByteSizeDataView, base::ByteSize> {
+  static uint64_t size(const base::ByteSize& byte_size) {
+    return byte_size.InBytes();
+  }
+  static bool Read(mojo_base::mojom::ByteSizeDataView data,
+                   base::ByteSize* byte_size);
+};
+
+template <>
+struct COMPONENT_EXPORT(MOJO_BASE_SHARED_TRAITS)
+    StructTraits<mojo_base::mojom::ByteSizeDeltaDataView, base::ByteSizeDelta> {
+  static int64_t delta(const base::ByteSizeDelta& byte_size_delta) {
+    return byte_size_delta.InBytes();
+  }
+  static bool Read(mojo_base::mojom::ByteSizeDeltaDataView data,
+                   base::ByteSizeDelta* byte_size_delta);
+};
+
+}  // namespace mojo
+
+#endif  // MOJO_PUBLIC_CPP_BASE_BYTE_SIZE_MOJOM_TRAITS_H_
diff --git a/mojo/public/cpp/base/byte_size_unittest.cc b/mojo/public/cpp/base/byte_size_unittest.cc
new file mode 100644
index 0000000..a8bd3e9
--- /dev/null
+++ b/mojo/public/cpp/base/byte_size_unittest.cc
@@ -0,0 +1,70 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/byte_size.h"
+
+#include <array>
+#include <limits>
+
+#include "mojo/public/cpp/base/byte_size_mojom_traits.h"
+#include "mojo/public/cpp/test_support/test_utils.h"
+#include "mojo/public/mojom/base/byte_size.mojom.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace mojo_base {
+
+constexpr auto kMinInt64 = std::numeric_limits<int64_t>::min();
+constexpr auto kMaxInt64 = std::numeric_limits<int64_t>::max();
+
+TEST(ByteSizeTest, ValidByteSize) {
+  const auto kTestCases = std::to_array<uint64_t>({
+      0u,
+      1u,
+      static_cast<uint64_t>(kMaxInt64) - 1,
+      static_cast<uint64_t>(kMaxInt64),
+  });
+  for (uint64_t bytes : kTestCases) {
+    SCOPED_TRACE(::testing::Message() << bytes << " bytes");
+    const base::ByteSize in(bytes);
+    base::ByteSize out;
+    ASSERT_TRUE(mojo::test::SerializeAndDeserialize<mojom::ByteSize>(in, out));
+    EXPECT_EQ(in, out);
+  }
+}
+
+TEST(ByteSizeTest, InvalidByteSize) {
+  const auto kTestCases = std::to_array<uint64_t>({
+      static_cast<uint64_t>(kMaxInt64) + 1,
+      std::numeric_limits<uint64_t>::max(),
+  });
+  for (uint64_t bytes : kTestCases) {
+    SCOPED_TRACE(::testing::Message() << bytes << " bytes");
+    auto in = mojom::ByteSize::New();
+    in->size = bytes;
+    base::ByteSize out;
+    EXPECT_FALSE(mojo::test::SerializeAndDeserialize<mojom::ByteSize>(in, out));
+  }
+}
+
+TEST(ByteSizeTest, ByteSizeDelta) {
+  const auto kTestCases = std::to_array<int64_t>({
+      kMinInt64,
+      kMinInt64 + 1,
+      -1,
+      0,
+      1,
+      kMaxInt64 - 1,
+      kMaxInt64,
+  });
+  for (int64_t bytes : kTestCases) {
+    SCOPED_TRACE(::testing::Message() << bytes << " bytes");
+    const base::ByteSizeDelta in(bytes);
+    base::ByteSizeDelta out;
+    ASSERT_TRUE(
+        mojo::test::SerializeAndDeserialize<mojom::ByteSizeDelta>(in, out));
+    EXPECT_EQ(in, out);
+  }
+}
+
+}  // namespace mojo_base
diff --git a/mojo/public/mojom/base/BUILD.gn b/mojo/public/mojom/base/BUILD.gn
index fddb3ca3..4b4772d 100644
--- a/mojo/public/mojom/base/BUILD.gn
+++ b/mojo/public/mojom/base/BUILD.gn
@@ -15,6 +15,7 @@
     "big_string.mojom",
     "binder.mojom",
     "byte_count.mojom",
+    "byte_size.mojom",
     "byte_string.mojom",
     "empty.mojom",
     "error.mojom",
@@ -116,6 +117,34 @@
     {
       types = [
         {
+          mojom = "mojo_base.mojom.ByteSize"
+          cpp = "::base::ByteSize"
+          copyable_pass_by_value = true
+        },
+      ]
+      traits_headers = [ "//mojo/public/cpp/base/byte_size_mojom_traits.h" ]
+      traits_public_deps = [
+        "//base",
+        "//mojo/public/cpp/base:shared_typemap_traits",
+      ]
+    },
+    {
+      types = [
+        {
+          mojom = "mojo_base.mojom.ByteSizeDelta"
+          cpp = "::base::ByteSizeDelta"
+          copyable_pass_by_value = true
+        },
+      ]
+      traits_headers = [ "//mojo/public/cpp/base/byte_size_mojom_traits.h" ]
+      traits_public_deps = [
+        "//base",
+        "//mojo/public/cpp/base:shared_typemap_traits",
+      ]
+    },
+    {
+      types = [
+        {
           mojom = "mojo_base.mojom.ByteString"
           cpp = "std::string"
         },
diff --git a/mojo/public/mojom/base/byte_count.mojom b/mojo/public/mojom/base/byte_count.mojom
index cccec16..d2faaa4d 100644
--- a/mojo/public/mojom/base/byte_count.mojom
+++ b/mojo/public/mojom/base/byte_count.mojom
@@ -5,6 +5,8 @@
 module mojo_base.mojom;
 
 // Corresponds to `base::ByteCount` in base/byte_count.h.
+//
+// DEPRECATED: use ByteSize for unsigned values and ByteSizeDelta for signed.
 struct ByteCount {
   int64 count;
 };
diff --git a/mojo/public/mojom/base/byte_size.mojom b/mojo/public/mojom/base/byte_size.mojom
new file mode 100644
index 0000000..e1ad006
--- /dev/null
+++ b/mojo/public/mojom/base/byte_size.mojom
@@ -0,0 +1,15 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module mojo_base.mojom;
+
+// Corresponds to `base::ByteSize` in base/byte_size.h.
+struct ByteSize {
+  uint64 size;
+};
+
+// Corresponds to `base::ByteSizeDelta` in base/byte_size.h.
+struct ByteSizeDelta {
+  int64 delta;
+};
diff --git a/net/disk_cache/sql/sql_backend_impl.cc b/net/disk_cache/sql/sql_backend_impl.cc
index bc76151..870fd9d 100644
--- a/net/disk_cache/sql/sql_backend_impl.cc
+++ b/net/disk_cache/sql/sql_backend_impl.cc
@@ -1097,7 +1097,7 @@
     if (buffer) {
       // Note: `buffer` can be nullptr.
       buffer = base::MakeRefCounted<net::VectorIOBuffer>(
-          buffer->span().first(static_cast<size_t>(buf_len)));
+          buffer->first(static_cast<size_t>(buf_len)));
     }
     // Callback to set an error on `res_id_or_error` when an error occurs or
     // the backend is deleted.
diff --git a/net/disk_cache/sql/sql_backend_impl_unittest.cc b/net/disk_cache/sql/sql_backend_impl_unittest.cc
index 28595bc7..a42e859 100644
--- a/net/disk_cache/sql/sql_backend_impl_unittest.cc
+++ b/net/disk_cache/sql/sql_backend_impl_unittest.cc
@@ -919,8 +919,7 @@
   ASSERT_EQ(
       entry->ReadData(0, 0, buffer.get(), buffer->size(), base::DoNothing()),
       kHeadData.size());
-  EXPECT_EQ(buffer->span().first(kHeadData.size()),
-            base::as_byte_span(kHeadData));
+  EXPECT_EQ(buffer->first(kHeadData.size()), base::as_byte_span(kHeadData));
   entry->Close();
 }
 
diff --git a/net/disk_cache/sql/sql_persistent_store_backend.cc b/net/disk_cache/sql/sql_persistent_store_backend.cc
index 04a5349..380749f 100644
--- a/net/disk_cache/sql/sql_persistent_store_backend.cc
+++ b/net/disk_cache/sql/sql_persistent_store_backend.cc
@@ -1578,8 +1578,7 @@
   statement.BindInt64(0, res_id.value());
   statement.BindInt64(1, start);
   statement.BindInt64(2, end);
-  const auto new_blob =
-      buffer->span().first(base::checked_cast<size_t>(buf_len));
+  const auto new_blob = buffer->first(base::checked_cast<size_t>(buf_len));
   statement.BindInt(3, CalculateCheckSum(new_blob, key.hash()));
   statement.BindBlob(4, new_blob);
   if (!statement.Run()) {
diff --git a/net/dns/dns_record_fuzzer.cc b/net/dns/dns_record_fuzzer.cc
index 68421bf4..386d329 100644
--- a/net/dns/dns_record_fuzzer.cc
+++ b/net/dns/dns_record_fuzzer.cc
@@ -12,6 +12,7 @@
 #include "base/containers/span.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/time/time.h"
 #include "net/dns/dns_response.h"
 #include "net/dns/record_parsed.h"
diff --git a/net/filter/gzip_source_stream.cc b/net/filter/gzip_source_stream.cc
index f25eed8..08a12e7a 100644
--- a/net/filter/gzip_source_stream.cc
+++ b/net/filter/gzip_source_stream.cc
@@ -99,8 +99,7 @@
   // Span that tracks the portion of `input_buffer` that has not yet been
   // process. The data isn't const because the zlib API doesn't use consts for
   // input, but it should not be modified in practice.
-  base::span<uint8_t> input_data =
-      input_buffer->span().first(input_buffer_size);
+  base::span<uint8_t> input_data = input_buffer->first(input_buffer_size);
 
   size_t bytes_out = 0;
   bool state_compressed_entered = false;
diff --git a/net/filter/zstd_source_stream_unittest.cc b/net/filter/zstd_source_stream_unittest.cc
index 64bd4c133..05af6a3 100644
--- a/net/filter/zstd_source_stream_unittest.cc
+++ b/net/filter/zstd_source_stream_unittest.cc
@@ -295,7 +295,7 @@
                                      callback.callback());
 
   EXPECT_EQ(static_cast<int>(source_data_len()), bytes_read);
-  EXPECT_EQ(base::as_string_view(out_buffer->span().first(source_data_len())),
+  EXPECT_EQ(base::as_string_view(out_buffer->first(source_data_len())),
             source_data());
 }
 
diff --git a/net/third_party/quiche/overrides/quiche_platform_impl/quiche_command_line_flags_impl.cc b/net/third_party/quiche/overrides/quiche_platform_impl/quiche_command_line_flags_impl.cc
index c1322b6b..50201d0 100644
--- a/net/third_party/quiche/overrides/quiche_platform_impl/quiche_command_line_flags_impl.cc
+++ b/net/third_party/quiche/overrides/quiche_platform_impl/quiche_command_line_flags_impl.cc
@@ -13,6 +13,7 @@
 #include "base/command_line.h"
 #include "base/export_template.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
diff --git a/net/tools/cert_verify_tool/cert_verify_tool.cc b/net/tools/cert_verify_tool/cert_verify_tool.cc
index 63e8bc7..153673a 100644
--- a/net/tools/cert_verify_tool/cert_verify_tool.cc
+++ b/net/tools/cert_verify_tool/cert_verify_tool.cc
@@ -9,6 +9,7 @@
 #include "base/command_line.h"
 #include "base/functional/bind.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/strings/string_split.h"
 #include "base/synchronization/waitable_event.h"
diff --git a/net/tools/net_watcher/net_watcher.cc b/net/tools/net_watcher/net_watcher.cc
index 35a1407b..21e9905 100644
--- a/net/tools/net_watcher/net_watcher.cc
+++ b/net/tools/net_watcher/net_watcher.cc
@@ -19,6 +19,7 @@
 #include "base/compiler_specific.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/strings/string_split.h"
diff --git a/net/tools/root_store_tool/root_store_tool.cc b/net/tools/root_store_tool/root_store_tool.cc
index 0fa67bcd..9ddf89d7 100644
--- a/net/tools/root_store_tool/root_store_tool.cc
+++ b/net/tools/root_store_tool/root_store_tool.cc
@@ -19,6 +19,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/path_service.h"
 #include "base/strings/strcat.h"
diff --git a/net/tools/stress_cache/stress_cache.cc b/net/tools/stress_cache/stress_cache.cc
index 6f14a15..8c1b28f 100644
--- a/net/tools/stress_cache/stress_cache.cc
+++ b/net/tools/stress_cache/stress_cache.cc
@@ -27,6 +27,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/path_service.h"
 #include "base/process/launch.h"
diff --git a/net/tools/testserver/run_testserver.cc b/net/tools/testserver/run_testserver.cc
index 45508e6..7b9506e 100644
--- a/net/tools/testserver/run_testserver.cc
+++ b/net/tools/testserver/run_testserver.cc
@@ -11,6 +11,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/net/tools/tld_cleanup/tld_cleanup.cc b/net/tools/tld_cleanup/tld_cleanup.cc
index 5482dcb..daa9be06 100644
--- a/net/tools/tld_cleanup/tld_cleanup.cc
+++ b/net/tools/tld_cleanup/tld_cleanup.cc
@@ -31,6 +31,7 @@
 #include "base/files/file_path.h"
 #include "base/i18n/icu_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/path_service.h"
 #include "base/process/memory.h"
 #include "net/tools/tld_cleanup/tld_cleanup_util.h"
diff --git a/net/tools/transport_security_state_generator/transport_security_state_generator.cc b/net/tools/transport_security_state_generator/transport_security_state_generator.cc
index 114273c8..e985542f 100644
--- a/net/tools/transport_security_state_generator/transport_security_state_generator.cc
+++ b/net/tools/transport_security_state_generator/transport_security_state_generator.cc
@@ -13,6 +13,7 @@
 #include "base/compiler_specific.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/path_service.h"
 #include "base/strings/string_view_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/pdf/BUILD.gn b/pdf/BUILD.gn
index e893d6fe6..a6cdc56 100644
--- a/pdf/BUILD.gn
+++ b/pdf/BUILD.gn
@@ -437,6 +437,8 @@
     sources = [
       "test/fake_annotation_agent_host.cc",
       "test/fake_annotation_agent_host.h",
+      "test/input_event_util.cc",
+      "test/input_event_util.h",
       "test/mock_pdf_caret_client.cc",
       "test/mock_pdf_caret_client.h",
       "test/mock_web_associated_url_loader.cc",
diff --git a/pdf/pdf_ink_module_unittest.cc b/pdf/pdf_ink_module_unittest.cc
index bc7b638..1ee6e26 100644
--- a/pdf/pdf_ink_module_unittest.cc
+++ b/pdf/pdf_ink_module_unittest.cc
@@ -34,6 +34,7 @@
 #include "pdf/pdf_ink_module_client.h"
 #include "pdf/pdf_ink_transform.h"
 #include "pdf/pdfium/pdfium_ink_reader.h"
+#include "pdf/test/input_event_util.h"
 #include "pdf/test/mock_pdf_caret_client.h"
 #include "pdf/test/mouse_event_builder.h"
 #include "pdf/test/pdf_ink_test_helpers.h"
@@ -220,22 +221,6 @@
   return true;
 }
 
-blink::WebMouseEvent CreateMouseMoveEventAtPoint(const gfx::PointF& point) {
-  return MouseEventBuilder()
-      .SetType(blink::WebInputEvent::Type::kMouseMove)
-      .SetPosition(point)
-      .Build();
-}
-
-blink::WebMouseEvent CreateMouseMoveWithLeftButtonEventAtPoint(
-    const gfx::PointF& point) {
-  return MouseEventBuilder()
-      .SetType(blink::WebInputEvent::Type::kMouseMove)
-      .SetPosition(point)
-      .SetButton(blink::WebPointerProperties::Button::kLeft)
-      .Build();
-}
-
 base::Value::Dict CreateGetAnnotationBrushMessage(
     const std::string& brush_type) {
   auto message = base::Value::Dict()
@@ -1103,9 +1088,7 @@
     {
       // Start a drawing or erase action.
       blink::WebMouseEvent mouse_down_event =
-          MouseEventBuilder()
-              .CreateLeftClickAtPosition(kMouseDownPoint)
-              .Build();
+          CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint);
       EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
       // Simulate scenario where another view has taken the focus and consumed
@@ -1113,11 +1096,7 @@
       // left mouse button being pressed.  This should be handled, as it treats
       // it as a signal to terminate the prior stroke.
       blink::WebMouseEvent mouse_move_event =
-          MouseEventBuilder()
-              .SetType(blink::WebInputEvent::Type::kMouseMove)
-              .SetPosition(kMouseMovePoint)
-              .SetButton(blink::WebPointerProperties::Button::kNoButton)
-              .Build();
+          CreateMoveWebMouseEventToPosition(kMouseMovePoint);
       EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
     }
 
@@ -1126,26 +1105,18 @@
       // since there is no longer any active drawing or erasing.
       constexpr gfx::PointF kMouseMovePoint2 = gfx::PointF(21.0f, 26.0f);
       blink::WebMouseEvent mouse_move_event =
-          MouseEventBuilder()
-              .SetType(blink::WebInputEvent::Type::kMouseMove)
-              .SetPosition(kMouseMovePoint2)
-              .SetButton(blink::WebPointerProperties::Button::kNoButton)
-              .Build();
+          CreateMoveWebMouseEventToPosition(kMouseMovePoint2);
       EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event));
     }
 
     {
       // Start another stroke with a new mouse down event, which is handled.
       blink::WebMouseEvent mouse_down_event =
-          MouseEventBuilder()
-              .CreateLeftClickAtPosition(kMouseDownPoint)
-              .Build();
+          CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint);
       EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
       blink::WebMouseEvent mouse_up_event =
-          MouseEventBuilder()
-              .CreateLeftMouseUpAtPosition(kMouseUpPoint)
-              .Build();
+          CreateLeftClickWebMouseUpEventAtPosition(kMouseUpPoint);
       EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
     }
   }
@@ -1363,19 +1334,19 @@
       const gfx::PointF& mouse_up_point,
       bool expect_mouse_events_handled) {
     blink::WebMouseEvent mouse_down_event =
-        MouseEventBuilder().CreateLeftClickAtPosition(mouse_down_point).Build();
+        CreateLeftClickWebMouseEventAtPosition(mouse_down_point);
     EXPECT_EQ(expect_mouse_events_handled,
               ink_module().HandleInputEvent(mouse_down_event));
 
     for (const gfx::PointF& mouse_move_point : mouse_move_points) {
       blink::WebMouseEvent mouse_move_event =
-          CreateMouseMoveWithLeftButtonEventAtPoint(mouse_move_point);
+          CreateLeftClickWebMouseMoveEventAtPosition(mouse_move_point);
       EXPECT_EQ(expect_mouse_events_handled,
                 ink_module().HandleInputEvent(mouse_move_event));
     }
 
     blink::WebMouseEvent mouse_up_event =
-        MouseEventBuilder().CreateLeftMouseUpAtPosition(mouse_up_point).Build();
+        CreateLeftClickWebMouseUpEventAtPosition(mouse_up_point);
     EXPECT_EQ(expect_mouse_events_handled,
               ink_module().HandleInputEvent(mouse_up_event));
   }
@@ -1589,20 +1560,17 @@
   InitializeSimpleSinglePageBasicLayout();
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder().CreateLeftClickAtPosition(kMouseDownPoint).Build();
+      CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kMouseMovePoint);
+      CreateLeftClickWebMouseMoveEventAtPosition(kMouseMovePoint);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   // Per manual testing on a Windows laptop, pen input causes mouse events to
   // lose their left-button down state while the pen is active.
   blink::WebMouseEvent mouse_move_no_left_button_event =
-      MouseEventBuilder()
-          .SetType(blink::WebInputEvent::Type::kMouseMove)
-          .SetPosition(kMouseMovePoint)
-          .Build();
+      CreateMoveWebMouseEventToPosition(kMouseMovePoint);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_no_left_button_event));
 
   const std::vector<base::span<const gfx::PointF>> all_move_points{
@@ -1618,7 +1586,7 @@
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event));
 
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder().CreateLeftMouseUpAtPosition(kMouseUpPoint).Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kMouseUpPoint);
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_up_event));
 
   ExpectStrokeCounts(/*started=*/2, /*modified_finished=*/2,
@@ -1641,7 +1609,7 @@
   EXPECT_TRUE(ink_module().HandleInputEvent(pen_start_event));
 
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kMouseMovePoint);
+      CreateLeftClickWebMouseMoveEventAtPosition(kMouseMovePoint);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   blink::WebTouchEvent pen_end_event =
@@ -2187,11 +2155,11 @@
   InitializeSimpleSinglePageBasicLayout();
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder().CreateLeftClickAtPosition(kMouseDownPoint).Build();
+      CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kMouseMovePoint);
+      CreateLeftClickWebMouseMoveEventAtPosition(kMouseMovePoint);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   // If the mouse up event went missing during stroking, the next mouse down
@@ -2223,11 +2191,11 @@
   InitializeSimpleSinglePageBasicLayout();
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder().CreateLeftClickAtPosition(kMouseDownPoint).Build();
+      CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kMouseMovePoint);
+      CreateLeftClickWebMouseMoveEventAtPosition(kMouseMovePoint);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   // If the mouse up event has yet to happen, the next touch start event
@@ -2250,9 +2218,7 @@
   SelectBrushTool(PdfInkBrush::Type::kPen, black_pen_message_params);
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kLeftVerticalStrokePoint1)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kLeftVerticalStrokePoint1);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   // While the stroke is still in progress, change the pen color.  This has no
@@ -2269,12 +2235,10 @@
   EXPECT_CALL(client(), StrokeAdded(kPageIndex, InkStrokeId(0),
                                     InkStrokeBrushColorEq(SK_ColorBLACK)));
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kLeftVerticalStrokePoint2);
+      CreateLeftClickWebMouseMoveEventAtPosition(kLeftVerticalStrokePoint2);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kLeftVerticalStrokePoint2)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kLeftVerticalStrokePoint2);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
   VerifyAndClearExpectations();
 
@@ -2304,9 +2268,7 @@
   SelectBrushTool(PdfInkBrush::Type::kPen, message_params);
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kLeftVerticalStrokePoint1)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kLeftVerticalStrokePoint1);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   // While the stroke is still in progress, change the pen size.  This has no
@@ -2328,12 +2290,10 @@
                 UpdateInkCursor(CursorBitmapImageSizeEq(SkISize(8, 8))));
   }
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kLeftVerticalStrokePoint2);
+      CreateLeftClickWebMouseMoveEventAtPosition(kLeftVerticalStrokePoint2);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kLeftVerticalStrokePoint2)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kLeftVerticalStrokePoint2);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
   VerifyAndClearExpectations();
 
@@ -2356,9 +2316,7 @@
   EXPECT_CALL(client(), StrokeAdded(kPageIndex, InkStrokeId(1), _));
   EXPECT_CALL(client(), UpdateStrokeActive(_, _, _)).Times(0);
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kRightVerticalStrokePoint1)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kRightVerticalStrokePoint1);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   // While the stroke is still in progress, change to the eraser tool.  This
@@ -2373,12 +2331,10 @@
   EXPECT_CALL(client(), StrokeAdded(_, _, _)).Times(0);
   EXPECT_CALL(client(), UpdateStrokeActive(_, _, _)).Times(0);
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kRightVerticalStrokePoint2);
+      CreateLeftClickWebMouseMoveEventAtPosition(kRightVerticalStrokePoint2);
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event));
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kRightVerticalStrokePoint2)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kRightVerticalStrokePoint2);
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_up_event));
   VerifyAndClearExpectations();
 
@@ -2418,9 +2374,7 @@
   EXPECT_CALL(client(), StrokeAdded(_, _, _)).Times(0);
   EXPECT_CALL(client(), UpdateStrokeActive(kPageIndex, InkStrokeId(0), _));
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kLeftVerticalStrokePoint1)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kLeftVerticalStrokePoint1);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   // While the stroke is still in progress, change the input tool type to a
@@ -2439,12 +2393,10 @@
   EXPECT_CALL(client(), StrokeAdded(_, _, _)).Times(0);
   EXPECT_CALL(client(), UpdateStrokeActive(_, _, _)).Times(0);
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kRightVerticalStrokePoint2);
+      CreateLeftClickWebMouseMoveEventAtPosition(kRightVerticalStrokePoint2);
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event));
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kRightVerticalStrokePoint1)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kRightVerticalStrokePoint1);
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_up_event));
   VerifyAndClearExpectations();
 
@@ -2472,9 +2424,7 @@
   SelectBrushTool(PdfInkBrush::Type::kPen, pen_message_params);
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kLeftVerticalStrokePoint1)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kLeftVerticalStrokePoint1);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   // While the stroke is still in progress, change the input tool type to a
@@ -2500,12 +2450,10 @@
                 UpdateInkCursor(CursorBitmapImageSizeEq(SkISize(10, 10))));
   }
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kLeftVerticalStrokePoint2);
+      CreateLeftClickWebMouseMoveEventAtPosition(kLeftVerticalStrokePoint2);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kLeftVerticalStrokePoint2)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kLeftVerticalStrokePoint2);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
   VerifyAndClearExpectations();
 
@@ -2523,11 +2471,11 @@
   InitializeSimpleSinglePageBasicLayout();
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder().CreateLeftClickAtPosition(kMouseDownPoint).Build();
+      CreateLeftClickWebMouseEventAtPosition(kMouseDownPoint);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kMouseMovePoint);
+      CreateLeftClickWebMouseMoveEventAtPosition(kMouseMovePoint);
   // Simulate a condition from https://crbug.com/421120183 where the event time
   // stamp goes backwards in time. This should not crash.
   mouse_move_event.SetTimeStamp(mouse_move_event.TimeStamp() -
@@ -2535,7 +2483,7 @@
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder().CreateLeftMouseUpAtPosition(kMouseUpPoint).Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kMouseUpPoint);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
 
   EXPECT_EQ(2, GetInputOfTypeCountForPage(
@@ -3813,11 +3761,9 @@
   // Mousemove and mouseup events will be handled but will not result in any
   // additional strokes.
   EXPECT_TRUE(ink_module().HandleInputEvent(
-      CreateMouseMoveWithLeftButtonEventAtPoint(kStartPointInsidePage0)));
+      CreateLeftClickWebMouseMoveEventAtPosition(kStartPointInsidePage0)));
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kStartPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kStartPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
 
   ExpectStrokeCounts(/*started=*/2, /*modified_finished=*/1,
@@ -3876,11 +3822,9 @@
   // Mousemove and mouseup events will be handled but will not result in any
   // additional strokes.
   EXPECT_TRUE(ink_module().HandleInputEvent(
-      CreateMouseMoveWithLeftButtonEventAtPoint(kStartPointInsidePage0)));
+      CreateLeftClickWebMouseMoveEventAtPosition(kStartPointInsidePage0)));
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kStartPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kStartPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
 
   ExpectStrokeCounts(/*started=*/3, /*modified_finished=*/2,
@@ -3900,9 +3844,7 @@
                                               /*click_count=*/1));
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kStartPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   VerifyAndClearExpectations();
@@ -3914,13 +3856,11 @@
   EXPECT_CALL(client(), ExtendSelectionByPoint(kEndPointInsidePage0));
 
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kEndPointInsidePage0);
+      CreateLeftClickWebMouseMoveEventAtPosition(kEndPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kEndPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kEndPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
 
   ExpectStrokeCounts(/*started=*/1, /*modified_finished=*/1,
@@ -3955,9 +3895,7 @@
                                               /*click_count=*/1));
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kStartPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   // Move to page 1. Select rects from both pages.
@@ -3975,14 +3913,13 @@
               ExtendSelectionByPoint(kTwoPageVerticalLayoutPoint1InsidePage1));
 
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(
+      CreateLeftClickWebMouseMoveEventAtPosition(
           kTwoPageVerticalLayoutPoint1InsidePage1);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kTwoPageVerticalLayoutPoint1InsidePage1)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(
+          kTwoPageVerticalLayoutPoint1InsidePage1);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
 
   // All the selection strokes are considered one stroke.
@@ -4145,7 +4082,7 @@
 
   // Move to a text position. The cursor should remain as the custom pen cursor.
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveEventAtPoint(kEndPointInsidePage0);
+      CreateMoveWebMouseEventToPosition(kEndPointInsidePage0);
   // The event will be considered not handled, but the cursor will still update.
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event));
 
@@ -4163,7 +4100,7 @@
   // Move to a text position. The cursor should be an I-beam.
   EXPECT_CALL(client(),
               UpdateInkCursor(ui::Cursor(ui::mojom::CursorType::kIBeam)));
-  mouse_move_event = CreateMouseMoveEventAtPoint(kStartPointInsidePage0);
+  mouse_move_event = CreateMoveWebMouseEventToPosition(kStartPointInsidePage0);
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event));
 
   VerifyAndClearExpectations();
@@ -4177,7 +4114,7 @@
     EXPECT_CALL(client(),
                 UpdateInkCursor(CursorBitmapImageSizeEq(SkISize(10, 10))));
   }
-  mouse_move_event = CreateMouseMoveEventAtPoint(kEndPointInsidePage0);
+  mouse_move_event = CreateMoveWebMouseEventToPosition(kEndPointInsidePage0);
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event));
 }
 
@@ -4199,7 +4136,7 @@
   EXPECT_CALL(client(),
               UpdateInkCursor(ui::Cursor(ui::mojom::CursorType::kIBeam)));
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveEventAtPoint(kStartPointInsidePage0);
+      CreateMoveWebMouseEventToPosition(kStartPointInsidePage0);
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event));
 
   VerifyAndClearExpectations();
@@ -4208,12 +4145,10 @@
   // remain as an I-beam.
   EXPECT_CALL(client(), UpdateInkCursor(_)).Times(0);
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kStartPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
   mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kEndPointInsidePage0);
+      CreateLeftClickWebMouseMoveEventAtPosition(kEndPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   VerifyAndClearExpectations();
@@ -4223,9 +4158,7 @@
   EXPECT_CALL(client(),
               UpdateInkCursor(CursorBitmapImageSizeEq(SkISize(8, 8))));
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kEndPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kEndPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
 }
 
@@ -4247,7 +4180,7 @@
   // highlighter cursor.
   EXPECT_CALL(client(), UpdateInkCursor(_)).Times(0);
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveEventAtPoint(kStartPointInsidePage0);
+      CreateMoveWebMouseEventToPosition(kStartPointInsidePage0);
   EXPECT_FALSE(ink_module().HandleInputEvent(mouse_move_event));
 
   VerifyAndClearExpectations();
@@ -4256,12 +4189,10 @@
   // custom highlighter cursor.
   EXPECT_CALL(client(), UpdateInkCursor(_)).Times(0);
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kStartPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
   mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kEndPointInsidePage0);
+      CreateLeftClickWebMouseMoveEventAtPosition(kEndPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   VerifyAndClearExpectations();
@@ -4270,9 +4201,7 @@
   EXPECT_CALL(client(),
               UpdateInkCursor(ui::Cursor(ui::mojom::CursorType::kIBeam)));
   blink::WebMouseEvent mouse_up_event =
-      MouseEventBuilder()
-          .CreateLeftMouseUpAtPosition(kEndPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseUpEventAtPosition(kEndPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_up_event));
 }
 
@@ -4317,13 +4246,11 @@
   EXPECT_CALL(client(), ExtendSelectionByPoint(kEndPointInsidePage0));
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kStartPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kEndPointInsidePage0);
+      CreateLeftClickWebMouseMoveEventAtPosition(kEndPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   // If the mouse up event went missing during stroking, the next mouse down
@@ -4350,13 +4277,11 @@
   EXPECT_CALL(client(), ExtendSelectionByPoint(kEndPointInsidePage0));
 
   blink::WebMouseEvent mouse_down_event =
-      MouseEventBuilder()
-          .CreateLeftClickAtPosition(kStartPointInsidePage0)
-          .Build();
+      CreateLeftClickWebMouseEventAtPosition(kStartPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_down_event));
 
   blink::WebMouseEvent mouse_move_event =
-      CreateMouseMoveWithLeftButtonEventAtPoint(kEndPointInsidePage0);
+      CreateLeftClickWebMouseMoveEventAtPosition(kEndPointInsidePage0);
   EXPECT_TRUE(ink_module().HandleInputEvent(mouse_move_event));
 
   // If the mouse up event has yet to happen, the next touch start event
@@ -4653,7 +4578,7 @@
   // `click_count` clicks.
   void MouseMoveAndUpAtPoint(const gfx::PointF& point, int click_count) {
     EXPECT_TRUE(ink_module().HandleInputEvent(
-        CreateMouseMoveWithLeftButtonEventAtPoint(point)));
+        CreateLeftClickWebMouseMoveEventAtPosition(point)));
 
     blink::WebMouseEvent mouse_up_event =
         MouseEventBuilder()
diff --git a/pdf/pdf_view_web_plugin_unittest.cc b/pdf/pdf_view_web_plugin_unittest.cc
index 1718bd6..aaf84aff 100644
--- a/pdf/pdf_view_web_plugin_unittest.cc
+++ b/pdf/pdf_view_web_plugin_unittest.cc
@@ -43,6 +43,7 @@
 #include "pdf/pdf_features.h"
 #include "pdf/pdf_ink_annotation_mode.h"
 #include "pdf/test/fake_annotation_agent_host.h"
+#include "pdf/test/input_event_util.h"
 #include "pdf/test/mock_web_associated_url_loader.h"
 #include "pdf/test/mouse_event_builder.h"
 #include "pdf/test/test_helpers.h"
@@ -2963,12 +2964,10 @@
     // Draw some trivial strokes.
     plugin_->OnMessage(
         CreateSetAnnotationModeMessageForTesting(InkAnnotationMode::kDraw));
-    TestSendInputEvent(
-        MouseEventBuilder().CreateLeftClickAtPosition({10, 10}).Build(),
-        blink::WebInputEventResult::kHandledApplication);
-    TestSendInputEvent(
-        MouseEventBuilder().CreateLeftMouseUpAtPosition({20, 20}).Build(),
-        blink::WebInputEventResult::kHandledApplication);
+    TestSendInputEvent(CreateLeftClickWebMouseEventAtPosition({10, 10}),
+                       blink::WebInputEventResult::kHandledApplication);
+    TestSendInputEvent(CreateLeftClickWebMouseUpEventAtPosition({20, 20}),
+                       blink::WebInputEventResult::kHandledApplication);
   }
 
   void SendThumbnail(std::string_view message_id, const gfx::SizeF& page_size) {
@@ -2994,9 +2993,11 @@
               ink_module_client->VisiblePageIndexFromPoint(point));
   }
 
-  void TestInProgressDraw(base::FilePath::StringViewType expected_filename,
-                          const gfx::PointF& start_position,
-                          const gfx::PointF& end_position) {
+  void TestInProgressDraw(
+      base::FilePath::StringViewType expected_filename,
+      const blink::WebInputEvent& down_event,
+      base::span<const blink::WebInputEvent* const> move_events,
+      const blink::WebInputEvent& up_event) {
     plugin_->set_in_paint_for_testing(true);
     constexpr gfx::Rect kScreenRect(kCanvasSize);
     constexpr gfx::SizeF kPageSizeInPoints(
@@ -3025,16 +3026,12 @@
     EXPECT_CALL(*engine_ptr_, ApplyStroke(_, _, _)).Times(0);
     // The final imaging for a stroke saved to a PDF should match what was final
     // drawn result when it was in-progress.
-    TestSendInputEvent(
-        MouseEventBuilder().CreateLeftClickAtPosition(start_position).Build(),
-        blink::WebInputEventResult::kHandledApplication);
-    TestSendInputEvent(
-        MouseEventBuilder()
-            .SetType(blink::WebInputEvent::Type::kMouseMove)
-            .SetPosition(end_position)
-            .SetButton(blink::WebPointerProperties::Button::kLeft)
-            .Build(),
-        blink::WebInputEventResult::kHandledApplication);
+    TestSendInputEvent(down_event,
+                       blink::WebInputEventResult::kHandledApplication);
+    for (const auto* move_event : move_events) {
+      TestSendInputEvent(*move_event,
+                         blink::WebInputEventResult::kHandledApplication);
+    }
 
     // Draw the canvas for the in-progress stroke.
     plugin_->Paint(canvas_.sk_canvas(), kScreenRect);
@@ -3048,9 +3045,8 @@
     // callback to be applied to a PDF page.
     testing::Mock::VerifyAndClearExpectations(engine_ptr_);
     EXPECT_CALL(*engine_ptr_, ApplyStroke(/*page_index=*/0, InkStrokeId(0), _));
-    TestSendInputEvent(
-        MouseEventBuilder().CreateLeftMouseUpAtPosition(end_position).Build(),
-        blink::WebInputEventResult::kHandledApplication);
+    TestSendInputEvent(up_event,
+                       blink::WebInputEventResult::kHandledApplication);
 
     // Updating of `PdfViewWebPlugin::snapshot_` does not happen automatically
     // on the invalidate call, but later after the tasks PaintManager posted
@@ -3443,10 +3439,17 @@
 TEST_P(PdfViewWebPluginInkTest, DrawInProgressStroke) {
   plugin_->OnMessage(
       CreateSetAnnotationModeMessageForTesting(InkAnnotationMode::kDraw));
+  static constexpr gfx::PointF kStartPosition{95.0f, 85.0f};
+  static constexpr gfx::PointF kEndPosition{50.0f, 45.0f};
+  blink::WebMouseEvent start_event =
+      CreateLeftClickWebMouseEventAtPosition(kStartPosition);
+  blink::WebMouseEvent move_event =
+      CreateLeftClickWebMouseMoveEventAtPosition(kEndPosition);
+  blink::WebMouseEvent end_event =
+      CreateLeftClickWebMouseUpEventAtPosition(kEndPosition);
   TestInProgressDraw(
       /*expected_filename=*/FILE_PATH_LITERAL("diagonal_stroke.png"),
-      /*start_position=*/gfx::PointF(95, 85),
-      /*end_position=*/gfx::PointF(50, 45));
+      start_event, {&move_event}, end_event);
 }
 
 class PdfViewWebPluginInkTextHighlightTest : public PdfViewWebPluginInkTest {
@@ -3490,15 +3493,11 @@
       "highlighter", &kLightGreenBrushParams));
 
   SetUpMouseDownMoveTextTestExpectations();
-  TestSendInputEvent(
-      MouseEventBuilder().CreateLeftClickAtPosition(kStartTextPosition).Build(),
-      blink::WebInputEventResult::kHandledApplication);
-  TestSendInputEvent(MouseEventBuilder()
-                         .SetType(blink::WebInputEvent::Type::kMouseMove)
-                         .SetPosition(kEndTextPosition)
-                         .SetButton(blink::WebPointerProperties::Button::kLeft)
-                         .Build(),
+  TestSendInputEvent(CreateLeftClickWebMouseEventAtPosition(kStartTextPosition),
                      blink::WebInputEventResult::kHandledApplication);
+  TestSendInputEvent(
+      CreateLeftClickWebMouseMoveEventAtPosition(kEndTextPosition),
+      blink::WebInputEventResult::kHandledApplication);
 
   EXPECT_CALL(*client_ptr_, TextSelectionChanged(_, _, _)).Times(0);
 
@@ -3519,10 +3518,17 @@
 
   SetUpMouseDownMoveTextTestExpectations();
 
+  static constexpr gfx::PointF kStartPosition{55.0f, 60.0f};
+  static constexpr gfx::PointF kEndPosition{75.0f, 65.0f};
+  blink::WebMouseEvent start_event =
+      CreateLeftClickWebMouseEventAtPosition(kStartPosition);
+  blink::WebMouseEvent move_event =
+      CreateLeftClickWebMouseMoveEventAtPosition(kEndPosition);
+  blink::WebMouseEvent end_event =
+      CreateLeftClickWebMouseUpEventAtPosition(kEndPosition);
   TestInProgressDraw(
       /*expected_filename=*/FILE_PATH_LITERAL("text_highlight_stroke.png"),
-      /*start_position=*/gfx::PointF(55.0f, 60.0f),
-      /*end_position=*/gfx::PointF(75.0f, 65.0f));
+      start_event, {&move_event}, end_event);
 }
 
 class PdfViewWebPluginInk2SaveTest : public PdfViewWebPluginSaveTest {
diff --git a/pdf/pdfium/accessibility_unittest.cc b/pdf/pdfium/accessibility_unittest.cc
index a20717e..b80a28811 100644
--- a/pdf/pdfium/accessibility_unittest.cc
+++ b/pdf/pdfium/accessibility_unittest.cc
@@ -211,15 +211,14 @@
       engine->GetStructureTree();
   ASSERT_TRUE(doc_structure);
 
-  static constexpr char kExpectedStructureTree[] =
-      "/S /Document\n"
-      "++/S /Part\n"
-      "++++/S /Document /Lang (en-US)\n"
-      "++++++/S /Art AssociatedTextRunLens={ 9 }\n"
-      "++++++/S /BlockQuote AssociatedTextRunLens={ 12 }\n"
-      "++++++/S /P AssociatedTextRunLens={ 11 }\n"
-      "++++++/S /H1 AssociatedTextRunLens={ 10 }\n"
-      "++++++/S /H2 AssociatedTextRunLens={ 8 }";
+  static constexpr char kExpectedStructureTree[] = R"(/S /Document
+++/S /Part
+++++/S /Document /Lang (en-US)
+++++++/S /Art AssociatedTextRunLens={ 9 }
+++++++/S /BlockQuote AssociatedTextRunLens={ 12 }
+++++++/S /P AssociatedTextRunLens={ 11 }
+++++++/S /H1 AssociatedTextRunLens={ 10 }
+++++++/S /H2 AssociatedTextRunLens={ 8 })";
 
   EXPECT_EQ(kExpectedStructureTree,
             AccessibilityStructureElementToString(*doc_structure));
@@ -239,17 +238,13 @@
       engine->GetStructureTree();
   ASSERT_TRUE(doc_structure);
 
-  static constexpr char kExpectedStructureTree[] =
-      "/S /Document\n"
-      "++/S /Part\n"
-      "++++/S /Document\n"
-      "++++++/S /P\n"
-      "++++++++/S /Figure /Alt (Image 1) "
-      "AssociatedImage={page_object_index=0 bounds=380,78 67x68}\n"
-      "++++++++/S /Figure /Alt (Image 2) "
-      "AssociatedImage={page_object_index=1 bounds=380,385 27x28}\n"
-      "++++++++/S /Figure /Alt (Image 3) "
-      "AssociatedImage={page_object_index=2 bounds=380,678 1x1}";
+  static constexpr char kExpectedStructureTree[] = R"(/S /Document
+++/S /Part
+++++/S /Document
+++++++/S /P
+++++++++/S /Figure /Alt (Image 1) AssociatedImage={page_object_index=0 bounds=380,78 67x68}
+++++++++/S /Figure /Alt (Image 2) AssociatedImage={page_object_index=1 bounds=380,385 27x28}
+++++++++/S /Figure /Alt (Image 3) AssociatedImage={page_object_index=2 bounds=380,678 1x1})";
 
   EXPECT_EQ(kExpectedStructureTree,
             AccessibilityStructureElementToString(*doc_structure));
diff --git a/pdf/pdfium/pdfium_engine_unittest.cc b/pdf/pdfium/pdfium_engine_unittest.cc
index 84336ae8..74772f5 100644
--- a/pdf/pdfium/pdfium_engine_unittest.cc
+++ b/pdf/pdfium/pdfium_engine_unittest.cc
@@ -37,6 +37,7 @@
 #include "pdf/pdfium/pdfium_engine_client.h"
 #include "pdf/pdfium/pdfium_page.h"
 #include "pdf/pdfium/pdfium_test_base.h"
+#include "pdf/test/input_event_util.h"
 #include "pdf/test/mouse_event_builder.h"
 #include "pdf/test/test_client.h"
 #include "pdf/test/test_document_loader.h"
@@ -96,16 +97,6 @@
   return arg.options() == options;
 }
 
-blink::WebMouseEvent CreateLeftClickWebMouseEventAtPosition(
-    const gfx::PointF& position) {
-  return MouseEventBuilder().CreateLeftClickAtPosition(position).Build();
-}
-
-blink::WebMouseEvent CreateLeftClickWebMouseUpEventAtPosition(
-    const gfx::PointF& position) {
-  return MouseEventBuilder().CreateLeftMouseUpAtPosition(position).Build();
-}
-
 blink::WebMouseEvent CreateRightClickWebMouseEventAtPosition(
     const gfx::PointF& position) {
   return MouseEventBuilder()
@@ -116,14 +107,6 @@
       .Build();
 }
 
-blink::WebMouseEvent CreateMoveWebMouseEventToPosition(
-    const gfx::PointF& position) {
-  return MouseEventBuilder()
-      .SetType(blink::WebInputEvent::Type::kMouseMove)
-      .SetPosition(position)
-      .Build();
-}
-
 std::string GetPlatformTextExpectation(std::string expectation) {
 #if BUILDFLAG(IS_WIN)
   base::ReplaceSubstringsAfterOffset(&expectation, /*start_offset=*/0, "\n",
diff --git a/pdf/test/input_event_util.cc b/pdf/test/input_event_util.cc
new file mode 100644
index 0000000..efd337ec
--- /dev/null
+++ b/pdf/test/input_event_util.cc
@@ -0,0 +1,41 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "pdf/test/input_event_util.h"
+
+#include "pdf/test/mouse_event_builder.h"
+#include "third_party/blink/public/common/input/web_input_event.h"
+#include "third_party/blink/public/common/input/web_mouse_event.h"
+#include "ui/gfx/geometry/point_f.h"
+
+namespace chrome_pdf {
+
+blink::WebMouseEvent CreateLeftClickWebMouseEventAtPosition(
+    const gfx::PointF& position) {
+  return MouseEventBuilder().CreateLeftClickAtPosition(position).Build();
+}
+
+blink::WebMouseEvent CreateLeftClickWebMouseMoveEventAtPosition(
+    const gfx::PointF& point) {
+  return MouseEventBuilder()
+      .SetType(blink::WebInputEvent::Type::kMouseMove)
+      .SetPosition(point)
+      .SetButton(blink::WebPointerProperties::Button::kLeft)
+      .Build();
+}
+
+blink::WebMouseEvent CreateLeftClickWebMouseUpEventAtPosition(
+    const gfx::PointF& position) {
+  return MouseEventBuilder().CreateLeftMouseUpAtPosition(position).Build();
+}
+
+blink::WebMouseEvent CreateMoveWebMouseEventToPosition(
+    const gfx::PointF& position) {
+  return MouseEventBuilder()
+      .SetType(blink::WebInputEvent::Type::kMouseMove)
+      .SetPosition(position)
+      .Build();
+}
+
+}  // namespace chrome_pdf
diff --git a/pdf/test/input_event_util.h b/pdf/test/input_event_util.h
new file mode 100644
index 0000000..78220c1
--- /dev/null
+++ b/pdf/test/input_event_util.h
@@ -0,0 +1,38 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PDF_TEST_INPUT_EVENT_UTIL_H_
+#define PDF_TEST_INPUT_EVENT_UTIL_H_
+
+#include "third_party/blink/public/common/input/web_mouse_event.h"
+
+namespace gfx {
+class PointF;
+}
+
+namespace chrome_pdf {
+
+// A set of utility functions to create commonly used input events.
+// To build custom events, use MouseEventBuilder or instantiate the event
+// directly.
+
+// Left button down at `position`.
+blink::WebMouseEvent CreateLeftClickWebMouseEventAtPosition(
+    const gfx::PointF& position);
+
+// Move to `position` with the left button down.
+blink::WebMouseEvent CreateLeftClickWebMouseMoveEventAtPosition(
+    const gfx::PointF& position);
+
+// Left button up at `position`.
+blink::WebMouseEvent CreateLeftClickWebMouseUpEventAtPosition(
+    const gfx::PointF& position);
+
+// Move to `position` with no associated button.
+blink::WebMouseEvent CreateMoveWebMouseEventToPosition(
+    const gfx::PointF& position);
+
+}  // namespace chrome_pdf
+
+#endif  // PDF_TEST_INPUT_EVENT_UTIL_H_
diff --git a/remoting/base/logging_linux.cc b/remoting/base/logging_linux.cc
index 1d1f0a1..ef24228f 100644
--- a/remoting/base/logging_linux.cc
+++ b/remoting/base/logging_linux.cc
@@ -5,6 +5,7 @@
 #include "remoting/base/logging_internal.h"
 
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 
 namespace remoting {
 
diff --git a/remoting/base/logging_mac.cc b/remoting/base/logging_mac.cc
index ec90654..2098ca29 100644
--- a/remoting/base/logging_mac.cc
+++ b/remoting/base/logging_mac.cc
@@ -5,6 +5,7 @@
 #include "remoting/base/logging_internal.h"
 
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 
 namespace remoting {
 
diff --git a/remoting/base/logging_win.cc b/remoting/base/logging_win.cc
index ec7c71e..c1a2d9e2 100644
--- a/remoting/base/logging_win.cc
+++ b/remoting/base/logging_win.cc
@@ -7,6 +7,7 @@
 #include <guiddef.h>
 
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/logging_win.h"
 #include "remoting/base/logging.h"
 
diff --git a/remoting/client/cli/remoting_client_main.cc b/remoting/client/cli/remoting_client_main.cc
index 0e41d28..84d95d5 100644
--- a/remoting/client/cli/remoting_client_main.cc
+++ b/remoting/client/cli/remoting_client_main.cc
@@ -8,6 +8,7 @@
 #include "base/command_line.h"
 #include "base/linux_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/strings/string_split.h"
diff --git a/remoting/host/setup/start_host_main.cc b/remoting/host/setup/start_host_main.cc
index d90bcb8..77effde 100644
--- a/remoting/host/setup/start_host_main.cc
+++ b/remoting/host/setup/start_host_main.cc
@@ -11,6 +11,7 @@
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
 #include "base/functional/bind.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/notreached.h"
 #include "base/run_loop.h"
diff --git a/services/audio/input_controller.h b/services/audio/input_controller.h
index 67690f7..c0321ce 100644
--- a/services/audio/input_controller.h
+++ b/services/audio/input_controller.h
@@ -24,10 +24,6 @@
 #include "media/base/audio_processing.h"
 #include "media/media_buildflags.h"
 #include "media/mojo/mojom/audio_processing.mojom.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/audio/loopback_mixin.h"
 
 namespace media {
diff --git a/services/audio/test/mock_log.h b/services/audio/test/mock_log.h
index f91ccb7e..19ba392 100644
--- a/services/audio/test/mock_log.h
+++ b/services/audio/test/mock_log.h
@@ -11,7 +11,6 @@
 #include "media/base/audio_parameters.h"
 #include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
 namespace audio {
diff --git a/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc b/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc
index 3a2d5c0..26aa75c 100644
--- a/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc
+++ b/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.cc
@@ -79,6 +79,7 @@
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/load_flags.h"
 #include "net/cert/cert_net_fetcher.h"
 #include "net/http/http_request_headers.h"
diff --git a/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h b/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h
index ae79bb9..a6de71f 100644
--- a/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h
+++ b/services/cert_verifier/cert_net_url_loader/cert_net_fetcher_url_loader.h
@@ -8,7 +8,6 @@
 #include "base/component_export.h"
 #include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "net/cert/cert_net_fetcher.h"
 #include "services/network/public/mojom/url_loader_factory.mojom.h"
 
diff --git a/services/data_decoder/public/cpp/data_decoder.h b/services/data_decoder/public/cpp/data_decoder.h
index 373d961..9493249 100644
--- a/services/data_decoder/public/cpp/data_decoder.h
+++ b/services/data_decoder/public/cpp/data_decoder.h
@@ -13,7 +13,6 @@
 #include "base/time/time.h"
 #include "base/types/expected.h"
 #include "base/values.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/http/structured_headers.h"
 #include "services/data_decoder/public/cpp/service_provider.h"
diff --git a/services/data_decoder/public/cpp/decode_image.h b/services/data_decoder/public/cpp/decode_image.h
index 314f971..b4f0557e1 100644
--- a/services/data_decoder/public/cpp/decode_image.h
+++ b/services/data_decoder/public/cpp/decode_image.h
@@ -8,8 +8,6 @@
 #include <stdint.h>
 
 #include "base/containers/span.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/data_decoder/public/mojom/data_decoder_service.mojom.h"
 #include "services/data_decoder/public/mojom/image_decoder.mojom.h"
 
diff --git a/services/data_decoder/public/cpp/safe_web_bundle_parser.h b/services/data_decoder/public/cpp/safe_web_bundle_parser.h
index 9bc3fac1..6b56402 100644
--- a/services/data_decoder/public/cpp/safe_web_bundle_parser.h
+++ b/services/data_decoder/public/cpp/safe_web_bundle_parser.h
@@ -12,7 +12,6 @@
 #include "base/files/file.h"
 #include "base/functional/callback.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/data_decoder/public/cpp/data_decoder.h"
diff --git a/services/device/compute_pressure/pressure_manager_impl.h b/services/device/compute_pressure/pressure_manager_impl.h
index 7973f3e..cd9f1b0 100644
--- a/services/device/compute_pressure/pressure_manager_impl.h
+++ b/services/device/compute_pressure/pressure_manager_impl.h
@@ -15,7 +15,6 @@
 #include "base/unguessable_token.h"
 #include "mojo/public/cpp/bindings/associated_receiver_set.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "services/device/public/mojom/pressure_manager.mojom.h"
diff --git a/services/device/public/cpp/test/scoped_pressure_manager_overrider.h b/services/device/public/cpp/test/scoped_pressure_manager_overrider.h
index e13814e..f56e170a 100644
--- a/services/device/public/cpp/test/scoped_pressure_manager_overrider.h
+++ b/services/device/public/cpp/test/scoped_pressure_manager_overrider.h
@@ -10,7 +10,6 @@
 #include "base/time/time.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "services/device/public/mojom/pressure_manager.mojom.h"
diff --git a/services/device/serial/serial_port_impl.h b/services/device/serial/serial_port_impl.h
index d0ee611c..96fa3ee 100644
--- a/services/device/serial/serial_port_impl.h
+++ b/services/device/serial/serial_port_impl.h
@@ -7,7 +7,6 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/services/media_session/media_session_service_impl.h b/services/media_session/media_session_service_impl.h
index 1a5ec1fa..ef5ef96 100644
--- a/services/media_session/media_session_service_impl.h
+++ b/services/media_session/media_session_service_impl.h
@@ -8,7 +8,6 @@
 #include <memory>
 
 #include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/receiver.h"
 #include "services/media_session/public/cpp/media_session_service.h"
 
 namespace media_session {
diff --git a/services/metrics/public/cpp/mojo_ukm_recorder.h b/services/metrics/public/cpp/mojo_ukm_recorder.h
index 3c54e581..bbbc547 100644
--- a/services/metrics/public/cpp/mojo_ukm_recorder.h
+++ b/services/metrics/public/cpp/mojo_ukm_recorder.h
@@ -8,7 +8,6 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/metrics/public/cpp/metrics_export.h"
diff --git a/services/metrics/public/cpp/ukm_recorder_client_interface_registry.h b/services/metrics/public/cpp/ukm_recorder_client_interface_registry.h
index b80246f..ca7f072 100644
--- a/services/metrics/public/cpp/ukm_recorder_client_interface_registry.h
+++ b/services/metrics/public/cpp/ukm_recorder_client_interface_registry.h
@@ -6,7 +6,6 @@
 #define SERVICES_METRICS_PUBLIC_CPP_UKM_RECORDER_CLIENT_INTERFACE_REGISTRY_H_
 
 #include "base/memory/weak_ptr.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "services/metrics/public/cpp/metrics_export.h"
 #include "services/metrics/public/mojom/ukm_interface.mojom.h"
diff --git a/services/network/cors/preflight_controller.cc b/services/network/cors/preflight_controller.cc
index c5e7690..1e42b59c 100644
--- a/services/network/cors/preflight_controller.cc
+++ b/services/network/cors/preflight_controller.cc
@@ -6,6 +6,7 @@
 
 #include <algorithm>
 #include <optional>
+#include <string>
 #include <vector>
 
 #include "base/functional/bind.h"
@@ -483,7 +484,7 @@
              has_authorization_covered_by_wildcard);
   }
 
-  void HandleResponseBody(std::unique_ptr<std::string> response_body) {
+  void HandleResponseBody(std::optional<std::string> response_body) {
     const int error = loader_->NetError();
     const std::optional<URLLoaderCompletionStatus>& status =
         loader_->CompletionStatus();
diff --git a/services/network/cors/preflight_controller.h b/services/network/cors/preflight_controller.h
index be0934b5..ad131ada 100644
--- a/services/network/cors/preflight_controller.h
+++ b/services/network/cors/preflight_controller.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include <optional>
+#include <string>
 
 #include "base/component_export.h"
 #include "base/containers/unique_ptr_adapters.h"
@@ -15,6 +16,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/types/expected.h"
 #include "base/types/strong_alias.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
 #include "services/network/cors/preflight_cache.h"
 #include "services/network/cors/preflight_result.h"
diff --git a/services/network/mock_mojo_dhcp_wpad_url_client.h b/services/network/mock_mojo_dhcp_wpad_url_client.h
index b163ed2..77db91e 100644
--- a/services/network/mock_mojo_dhcp_wpad_url_client.h
+++ b/services/network/mock_mojo_dhcp_wpad_url_client.h
@@ -8,8 +8,6 @@
 #include <memory>
 #include <string>
 
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/network/public/mojom/dhcp_wpad_url_client.mojom.h"
 
 namespace network {
diff --git a/services/network/oblivious_http_request_handler.cc b/services/network/oblivious_http_request_handler.cc
index 73a66f2..e2c66e4 100644
--- a/services/network/oblivious_http_request_handler.cc
+++ b/services/network/oblivious_http_request_handler.cc
@@ -6,6 +6,8 @@
 
 #include <algorithm>
 #include <array>
+#include <optional>
+#include <string>
 
 #include "base/i18n/time_formatting.h"
 #include "base/rand_util.h"
@@ -431,7 +433,7 @@
 
 void ObliviousHttpRequestHandler::OnRequestComplete(
     mojo::RemoteSetElementId id,
-    std::unique_ptr<std::string> response) {
+    std::optional<std::string> response) {
   auto state_iter = client_state_.find(id);
   CHECK(state_iter != client_state_.end());
 
@@ -449,7 +451,7 @@
   }
 
   auto maybe_payload =
-      state->ohttp_client->DecryptResponse(std::move(*response));
+      state->ohttp_client->DecryptResponse(std::move(response).value());
   if (!maybe_payload) {
     RespondWithError(id, net::ERR_INVALID_RESPONSE,
                      /*outer_response_error_code=*/std::nullopt);
diff --git a/services/network/oblivious_http_request_handler.h b/services/network/oblivious_http_request_handler.h
index 678fa48c..f2946a9 100644
--- a/services/network/oblivious_http_request_handler.h
+++ b/services/network/oblivious_http_request_handler.h
@@ -5,6 +5,9 @@
 #ifndef SERVICES_NETWORK_OBLIVIOUS_HTTP_REQUEST_HANDLER_H_
 #define SERVICES_NETWORK_OBLIVIOUS_HTTP_REQUEST_HANDLER_H_
 
+#include <optional>
+#include <string>
+
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "services/network/public/mojom/oblivious_http_request.mojom.h"
 #include "services/network/public/mojom/url_loader_factory.mojom.h"
@@ -86,7 +89,7 @@
   // Called by the SimpleURLLoader when the outer request has completed.
   // Performs steps 5 and 6 of the OHTTP request procedure above.
   void OnRequestComplete(mojo::RemoteSetElementId id,
-                         std::unique_ptr<std::string> response);
+                         std::optional<std::string> response);
 
   // Callback from TrustTokenRequestHelper::Finalize. Checks that the trust
   // token operation completed successfully and calls the client with the
diff --git a/services/network/public/cpp/resource_request.cc b/services/network/public/cpp/resource_request.cc
index 177aa95..dd0ebad1 100644
--- a/services/network/public/cpp/resource_request.cc
+++ b/services/network/public/cpp/resource_request.cc
@@ -10,6 +10,7 @@
 #include "base/trace_event/typed_macros.h"
 #include "base/types/optional_util.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/load_flags.h"
 #include "net/log/net_log_source.h"
 #include "services/network/public/cpp/permissions_policy/permissions_policy.h"
diff --git a/services/network/public/cpp/resource_request.h b/services/network/public/cpp/resource_request.h
index 53143c10..3fa1c79 100644
--- a/services/network/public/cpp/resource_request.h
+++ b/services/network/public/cpp/resource_request.h
@@ -14,7 +14,6 @@
 #include "base/debug/crash_logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/unguessable_token.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/isolation_info.h"
 #include "net/base/request_priority.h"
 #include "net/cookies/site_for_cookies.h"
diff --git a/services/network/public/cpp/self_deleting_url_loader_factory.h b/services/network/public/cpp/self_deleting_url_loader_factory.h
index 0fa1e531..e935a063 100644
--- a/services/network/public/cpp/self_deleting_url_loader_factory.h
+++ b/services/network/public/cpp/self_deleting_url_loader_factory.h
@@ -9,7 +9,6 @@
 #include "base/component_export.h"
 #include "base/threading/thread_checker.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "services/network/public/mojom/url_loader_factory.mojom.h"
 
diff --git a/services/network/public/cpp/simple_url_loader_unittest.cc b/services/network/public/cpp/simple_url_loader_unittest.cc
index 7fdeb96..98f8d39 100644
--- a/services/network/public/cpp/simple_url_loader_unittest.cc
+++ b/services/network/public/cpp/simple_url_loader_unittest.cc
@@ -40,6 +40,7 @@
 #include "base/test/test_timeouts.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
+#include "base/types/optional_ref.h"
 #include "build/build_config.h"
 #include "mojo/public/c/system/types.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
@@ -340,9 +341,9 @@
   // this is just the value passed to the callback. For DownloadType::TO_FILE,
   // it is nullptr if an empty FilePath was passed to the callback, or the
   // contents of the file, otherwise.
-  const std::string* response_body() const {
+  base::optional_ref<const std::string> response_body() const {
     EXPECT_TRUE(done_);
-    return response_body_.get();
+    return response_body_;
   }
 
   // Returns true if the callback has been invoked.
@@ -383,7 +384,7 @@
   }
 
  private:
-  void DownloadedToString(std::unique_ptr<std::string> response_body) {
+  void DownloadedToString(std::optional<std::string> response_body) {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     EXPECT_FALSE(done_);
     EXPECT_EQ(DownloadType::TO_STRING, download_type_);
@@ -413,8 +414,8 @@
 
     if (!file_path.empty()) {
       EXPECT_TRUE(base::PathExists(file_path));
-      response_body_ = std::make_unique<std::string>();
-      EXPECT_TRUE(base::ReadFileToString(file_path, response_body_.get()));
+      response_body_ = std::make_optional<std::string>();
+      EXPECT_TRUE(base::ReadFileToString(file_path, &*response_body_));
     }
 
     // Can do some additional checks in the TO_FILE case. Unfortunately, in the
@@ -506,7 +507,7 @@
     if (success ||
         (allow_http_error_results_ && simple_url_loader_->ResponseInfo())) {
       response_body_ =
-          std::make_unique<std::string>(download_as_stream_response_body_);
+          std::make_optional<std::string>(download_as_stream_response_body_);
     }
 
     if (destroy_loader_on_complete_)
@@ -549,8 +550,8 @@
   base::RunLoop run_loop_;
 
   // Response body, regardless of DownloadType. Only populated on completion.
-  // Null on error.
-  std::unique_ptr<std::string> response_body_;
+  // Empty on error.
+  std::optional<std::string> response_body_;
 
   base::OnceClosure on_destruction_callback_;
 
diff --git a/services/network/public/cpp/url_request_mojom_traits_unittest.cc b/services/network/public/cpp/url_request_mojom_traits_unittest.cc
index f66ba75..f502995 100644
--- a/services/network/public/cpp/url_request_mojom_traits_unittest.cc
+++ b/services/network/public/cpp/url_request_mojom_traits_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/test/gtest_util.h"
 #include "base/test/task_environment.h"
 #include "mojo/public/cpp/base/unguessable_token_mojom_traits.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/test_support/test_utils.h"
 #include "net/base/isolation_info.h"
 #include "net/base/load_flags.h"
diff --git a/services/network/sct_auditing/sct_auditing_reporter.cc b/services/network/sct_auditing/sct_auditing_reporter.cc
index d4c37c1..fd24f18 100644
--- a/services/network/sct_auditing/sct_auditing_reporter.cc
+++ b/services/network/sct_auditing/sct_auditing_reporter.cc
@@ -4,6 +4,9 @@
 
 #include "services/network/sct_auditing/sct_auditing_reporter.h"
 
+#include <optional>
+#include <string>
+
 #include "base/base64.h"
 #include "base/containers/contains.h"
 #include "base/functional/bind.h"
@@ -358,7 +361,7 @@
 }
 
 void SCTAuditingReporter::OnSendLookupQueryComplete(
-    std::unique_ptr<std::string> response_body) {
+    std::optional<std::string> response_body) {
   int response_code = 0;
   if (url_loader_->ResponseInfo() && url_loader_->ResponseInfo()->headers) {
     response_code = url_loader_->ResponseInfo()->headers->response_code();
diff --git a/services/network/sct_auditing/sct_auditing_reporter.h b/services/network/sct_auditing/sct_auditing_reporter.h
index bd0634c..5286fd74 100644
--- a/services/network/sct_auditing/sct_auditing_reporter.h
+++ b/services/network/sct_auditing/sct_auditing_reporter.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include <optional>
+#include <string>
 
 #include "base/component_export.h"
 #include "base/functional/callback_forward.h"
@@ -170,7 +171,7 @@
   void ScheduleRequestWithBackoff(base::OnceClosure request,
                                   base::TimeDelta minimum_delay);
   void SendLookupQuery();
-  void OnSendLookupQueryComplete(std::unique_ptr<std::string> response_body);
+  void OnSendLookupQueryComplete(std::optional<std::string> response_body);
   void SendReport();
   void OnSendReportComplete(scoped_refptr<net::HttpResponseHeaders> headers);
   void MaybeRetryRequest();
diff --git a/services/network/test/test_network_context_client.h b/services/network/test/test_network_context_client.h
index 03d5978..d8d2349 100644
--- a/services/network/test/test_network_context_client.h
+++ b/services/network/test/test_network_context_client.h
@@ -6,7 +6,6 @@
 #define SERVICES_NETWORK_TEST_TEST_NETWORK_CONTEXT_CLIENT_H_
 
 #include "build/build_config.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "services/network/public/cpp/network_service_buildflags.h"
 #include "services/network/public/mojom/network_context_client.mojom.h"
diff --git a/services/network/tls_client_socket.h b/services/network/tls_client_socket.h
index 93b7a7d7..ec5c9f05 100644
--- a/services/network/tls_client_socket.h
+++ b/services/network/tls_client_socket.h
@@ -8,7 +8,6 @@
 #include <memory>
 
 #include "base/component_export.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/address_family.h"
diff --git a/services/network/trust_tokens/trust_token_key_commitment_controller.cc b/services/network/trust_tokens/trust_token_key_commitment_controller.cc
index 9c55e913..c671fadc 100644
--- a/services/network/trust_tokens/trust_token_key_commitment_controller.cc
+++ b/services/network/trust_tokens/trust_token_key_commitment_controller.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 #include <optional>
+#include <string>
 #include <vector>
 
 #include "base/functional/bind.h"
@@ -115,7 +116,7 @@
 }
 
 void TrustTokenKeyCommitmentController::HandleResponseBody(
-    std::unique_ptr<std::string> response_body) {
+    std::optional<std::string> response_body) {
   DCHECK(parser_);
 
   int error = url_loader_->NetError();
diff --git a/services/network/trust_tokens/trust_token_key_commitment_controller.h b/services/network/trust_tokens/trust_token_key_commitment_controller.h
index 099f7465..3b41400 100644
--- a/services/network/trust_tokens/trust_token_key_commitment_controller.h
+++ b/services/network/trust_tokens/trust_token_key_commitment_controller.h
@@ -6,6 +6,8 @@
 #define SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_KEY_COMMITMENT_CONTROLLER_H_
 
 #include <memory>
+#include <optional>
+#include <string>
 #include <string_view>
 #include <vector>
 
@@ -131,7 +133,7 @@
 
   // On completion, parses the given response (if the request was
   // successful). Calls |completion_callback_| with an error
-  void HandleResponseBody(std::unique_ptr<std::string> response_body);
+  void HandleResponseBody(std::optional<std::string> response_body);
 
   // |url_loader_| performs the actual key commitment request.
   std::unique_ptr<SimpleURLLoader> url_loader_;
diff --git a/services/on_device_model/ml/on_device_model_executor.h b/services/on_device_model/ml/on_device_model_executor.h
index 0b19f53..7607173 100644
--- a/services/on_device_model/ml/on_device_model_executor.h
+++ b/services/on_device_model/ml/on_device_model_executor.h
@@ -18,7 +18,6 @@
 #include "base/native_library.h"
 #include "base/types/expected.h"
 #include "base/types/pass_key.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/on_device_model/backend.h"
 #include "services/on_device_model/backend_model.h"
 #include "services/on_device_model/backend_session.h"
diff --git a/services/on_device_model/public/cpp/text_safety_assets.h b/services/on_device_model/public/cpp/text_safety_assets.h
index 69020bf..ec9a870 100644
--- a/services/on_device_model/public/cpp/text_safety_assets.h
+++ b/services/on_device_model/public/cpp/text_safety_assets.h
@@ -8,8 +8,6 @@
 #include "base/component_export.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/on_device_model/public/mojom/on_device_model.mojom.h"
 #include "services/on_device_model/public/mojom/on_device_model_service.mojom.h"
 
diff --git a/services/service_manager/public/cpp/service_executable/main.cc b/services/service_manager/public/cpp/service_executable/main.cc
index 01331b4..0118d69 100644
--- a/services/service_manager/public/cpp/service_executable/main.cc
+++ b/services/service_manager/public/cpp/service_executable/main.cc
@@ -12,6 +12,7 @@
 #include "base/files/file_path.h"
 #include "base/i18n/icu_util.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/metrics/field_trial.h"
 #include "base/process/launch.h"
 #include "base/strings/string_split.h"
diff --git a/services/tracing/perfetto/test_utils.h b/services/tracing/perfetto/test_utils.h
index dbd002c..d9674a77 100644
--- a/services/tracing/perfetto/test_utils.h
+++ b/services/tracing/perfetto/test_utils.h
@@ -12,7 +12,6 @@
 #include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/test/task_environment.h"
-#include "mojo/public/cpp/bindings/receiver.h"
 #include "services/tracing/perfetto/perfetto_service.h"
 #include "services/tracing/public/cpp/perfetto/perfetto_traced_process.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc
index 0ceab1a8..864f8d5 100644
--- a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc
+++ b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc
@@ -20,6 +20,7 @@
 #include "build/build_config.h"
 #include "components/tracing/common/tracing_switches.h"
 #include "mojo/public/cpp/bindings/receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/data_pipe_drainer.h"
 #include "services/tracing/public/cpp/perfetto/shared_memory.h"
 #include "services/tracing/public/cpp/perfetto/trace_packet_tokenizer.h"
diff --git a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h
index 96c751d0..f33e788 100644
--- a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h
+++ b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h
@@ -9,7 +9,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "base/task/sequenced_task_runner.h"
-#include "mojo/public/cpp/bindings/remote.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/perfetto/include/perfetto/tracing/tracing_backend.h"
 
 namespace tracing {
diff --git a/services/tracing/public/cpp/system_tracing_service.h b/services/tracing/public/cpp/system_tracing_service.h
index cb37ad5..c0c3b39 100644
--- a/services/tracing/public/cpp/system_tracing_service.h
+++ b/services/tracing/public/cpp/system_tracing_service.h
@@ -8,7 +8,6 @@
 #include "base/component_export.h"
 #include "base/sequence_checker.h"
 #include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/bindings/shared_remote.h"
 #include "services/tracing/public/mojom/system_tracing_service.mojom.h"
 #include "third_party/perfetto/include/perfetto/ext/base/unix_socket.h"
diff --git a/services/video_capture/ash/video_capture_device_factory_ash.h b/services/video_capture/ash/video_capture_device_factory_ash.h
index 2be768e..99251f30 100644
--- a/services/video_capture/ash/video_capture_device_factory_ash.h
+++ b/services/video_capture/ash/video_capture_device_factory_ash.h
@@ -12,7 +12,6 @@
 #include "chromeos/crosapi/mojom/video_capture.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/video_capture/device_factory.h"
 
 namespace crosapi {
diff --git a/services/video_capture/device_factory_impl.h b/services/video_capture/device_factory_impl.h
index a4fa892c..5fa36046 100644
--- a/services/video_capture/device_factory_impl.h
+++ b/services/video_capture/device_factory_impl.h
@@ -13,7 +13,6 @@
 #include "media/capture/video/video_capture_system.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
-#include "mojo/public/cpp/bindings/receiver.h"
 #include "services/video_capture/device_factory.h"
 #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h"
 
diff --git a/services/video_capture/devices_changed_notifier.h b/services/video_capture/devices_changed_notifier.h
index a6ff87b8..faca3d6 100644
--- a/services/video_capture/devices_changed_notifier.h
+++ b/services/video_capture/devices_changed_notifier.h
@@ -6,7 +6,6 @@
 #define SERVICES_VIDEO_CAPTURE_DEVICES_CHANGED_NOTIFIER_H_
 
 #include "base/system/system_monitor.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h"
 
diff --git a/services/video_capture/push_video_stream_subscription_impl.h b/services/video_capture/push_video_stream_subscription_impl.h
index a24928e..08167cf7 100644
--- a/services/video_capture/push_video_stream_subscription_impl.h
+++ b/services/video_capture/push_video_stream_subscription_impl.h
@@ -8,7 +8,6 @@
 #include "base/memory/raw_ptr.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/video_capture/device.h"
 #include "services/video_capture/public/mojom/video_frame_handler.mojom.h"
 #include "services/video_capture/public/mojom/video_source.mojom.h"
diff --git a/services/video_capture/test/mock_video_capture_device_test.h b/services/video_capture/test/mock_video_capture_device_test.h
index 05a59b6..4fe95f65 100644
--- a/services/video_capture/test/mock_video_capture_device_test.h
+++ b/services/video_capture/test/mock_video_capture_device_test.h
@@ -11,8 +11,6 @@
 #include "media/capture/video/mock_device_factory.h"
 #include "media/capture/video/video_capture_device.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/video_capture/device_factory_impl.h"
 #include "services/video_capture/public/cpp/mock_video_frame_handler.h"
 #include "services/video_capture/public/mojom/device.mojom.h"
diff --git a/services/video_capture/video_source_impl.h b/services/video_capture/video_source_impl.h
index 46a7a5c39..f78bd23 100644
--- a/services/video_capture/video_source_impl.h
+++ b/services/video_capture/video_source_impl.h
@@ -16,7 +16,6 @@
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/video_capture/broadcasting_receiver.h"
 #include "services/video_capture/device_factory_impl.h"
 #include "services/video_capture/public/mojom/device.mojom.h"
diff --git a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc
index 33176c0..61527d30 100644
--- a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc
+++ b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc
@@ -1212,8 +1212,8 @@
   EXPECT_EQ(rect5, out_texture_draw_quad->visible_rect);
   EXPECT_EQ(needs_blending, out_texture_draw_quad->needs_blending);
   EXPECT_EQ(resource_id5, out_texture_draw_quad->resource_id);
-  EXPECT_EQ(uv_top_left, out_texture_draw_quad->uv_top_left);
-  EXPECT_EQ(uv_bottom_right, out_texture_draw_quad->uv_bottom_right);
+  EXPECT_EQ(gfx::BoundingRect(uv_top_left, uv_bottom_right),
+            out_texture_draw_quad->GetNormalizedTexCoords(gfx::Size(1, 1)));
   EXPECT_EQ(background_color, out_texture_draw_quad->background_color);
   EXPECT_EQ(nearest_neighbor, out_texture_draw_quad->nearest_neighbor);
   EXPECT_EQ(secure_output_only, out_texture_draw_quad->secure_output_only);
@@ -1224,8 +1224,9 @@
   EXPECT_EQ(rect7, out_rounded_display_mask_quad->visible_rect);
   EXPECT_EQ(needs_blending7, out_rounded_display_mask_quad->needs_blending);
   EXPECT_EQ(resource_id7, out_rounded_display_mask_quad->resource_id);
-  EXPECT_EQ(uv_top_left, out_rounded_display_mask_quad->uv_top_left);
-  EXPECT_EQ(uv_bottom_right, out_rounded_display_mask_quad->uv_bottom_right);
+  EXPECT_EQ(
+      gfx::BoundingRect(uv_top_left, uv_bottom_right),
+      out_rounded_display_mask_quad->GetNormalizedTexCoords(gfx::Size(1, 1)));
   EXPECT_EQ(origin_rounded_display_mask_radius,
             out_rounded_display_mask_quad->rounded_display_masks_info
                 .radii[TextureDrawQuad::RoundedDisplayMasksInfo::
diff --git a/services/viz/public/cpp/compositing/quads_mojom_traits.cc b/services/viz/public/cpp/compositing/quads_mojom_traits.cc
index 7c5f1d34..13bfa36 100644
--- a/services/viz/public/cpp/compositing/quads_mojom_traits.cc
+++ b/services/viz/public/cpp/compositing/quads_mojom_traits.cc
@@ -162,8 +162,7 @@
   gfx::ProtectedVideoType protected_video_type =
       gfx::ProtectedVideoType::kClear;
   viz::OverlayPriority overlay_priority_hint = viz::OverlayPriority::kLow;
-  if (!data.ReadUvTopLeft(&quad->uv_top_left) ||
-      !data.ReadUvBottomRight(&quad->uv_bottom_right) ||
+  if (!data.ReadTexCoordRect(&quad->tex_coord_rect_) ||
       !data.ReadProtectedVideoType(&protected_video_type) ||
       !data.ReadOverlayPriorityHint(&overlay_priority_hint) ||
       !data.ReadRoundedDisplayMasksInfo(&quad->rounded_display_masks_info) ||
diff --git a/services/viz/public/cpp/compositing/quads_mojom_traits.h b/services/viz/public/cpp/compositing/quads_mojom_traits.h
index 6eb03697..19c7725 100644
--- a/services/viz/public/cpp/compositing/quads_mojom_traits.h
+++ b/services/viz/public/cpp/compositing/quads_mojom_traits.h
@@ -35,6 +35,7 @@
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/gfx/geometry/mojom/geometry_mojom_traits.h"
 #include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/rect_f.h"
 #include "ui/gfx/hdr_metadata.h"
 #include "ui/gfx/mojom/hdr_metadata_mojom_traits.h"
 
@@ -415,16 +416,10 @@
     return quad->rounded_display_masks_info;
   }
 
-  static const gfx::PointF& uv_top_left(const viz::DrawQuad& input) {
+  static const gfx::RectF& tex_coord_rect(const viz::DrawQuad& input) {
     const viz::TextureDrawQuad* quad =
         viz::TextureDrawQuad::MaterialCast(&input);
-    return quad->uv_top_left;
-  }
-
-  static const gfx::PointF& uv_bottom_right(const viz::DrawQuad& input) {
-    const viz::TextureDrawQuad* quad =
-        viz::TextureDrawQuad::MaterialCast(&input);
-    return quad->uv_bottom_right;
+    return quad->tex_coord_rect_;
   }
 
   static SkColor4f background_color(const viz::DrawQuad& input) {
diff --git a/services/viz/public/mojom/compositing/layer.mojom b/services/viz/public/mojom/compositing/layer.mojom
index ec1a5ce..f9c1d248 100644
--- a/services/viz/public/mojom/compositing/layer.mojom
+++ b/services/viz/public/mojom/compositing/layer.mojom
@@ -354,9 +354,9 @@
 // Updates to a transform tree, not including the nodes themselves. These
 // correspond to data members of cc::TransformTree.
 struct TransformTreeUpdate {
-  float page_scale_factor;
-  float device_scale_factor;
-  float device_transform_scale_factor;
+  float page_scale_factor = 1.0;
+  float device_scale_factor = 1.0;
+  float device_transform_scale_factor = 1.0;
   array<int32> nodes_affected_by_outer_viewport_bounds_delta;
   array<int32> nodes_affected_by_safe_area_bottom;
   array<StickyPositionNodeData> sticky_position_data;
@@ -526,7 +526,7 @@
   FilterOperations filters;
   FilterOperations backdrop_filters;
   skia.mojom.SkPath? backdrop_filter_bounds;
-  float backdrop_filter_quality;
+  float backdrop_filter_quality = 1.0;
 
   // The element id corresponding to the mask to apply to the filtered backdrop
   // image.
diff --git a/services/viz/public/mojom/compositing/quads.mojom b/services/viz/public/mojom/compositing/quads.mojom
index 43348f7..e97e25a 100644
--- a/services/viz/public/mojom/compositing/quads.mojom
+++ b/services/viz/public/mojom/compositing/quads.mojom
@@ -88,8 +88,7 @@
 
 struct TextureQuadState {
   ResourceId resource_id;
-  gfx.mojom.PointF uv_top_left;
-  gfx.mojom.PointF uv_bottom_right;
+  gfx.mojom.RectF tex_coord_rect;
   skia.mojom.SkColor4f background_color;
   cc.mojom.DynamicRangeLimit dynamic_range_limit;
   bool nearest_neighbor;
diff --git a/services/webnn/webnn_object_impl.h b/services/webnn/webnn_object_impl.h
index b810744..3024ce8d 100644
--- a/services/webnn/webnn_object_impl.h
+++ b/services/webnn/webnn_object_impl.h
@@ -11,8 +11,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "base/task/bind_post_task.h"
-#include "mojo/public/cpp/bindings/associated_receiver.h"
-#include "mojo/public/cpp/bindings/receiver.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 
 namespace webnn {
diff --git a/sql/fuzzers/recovery_lpm_fuzzer.cc b/sql/fuzzers/recovery_lpm_fuzzer.cc
index d2c6c07..1f2515e 100644
--- a/sql/fuzzers/recovery_lpm_fuzzer.cc
+++ b/sql/fuzzers/recovery_lpm_fuzzer.cc
@@ -32,6 +32,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
 #include "base/logging/log_severity.h"
+#include "base/logging/logging_settings.h"
 #include "base/strings/cstring_view.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
diff --git a/testing/buildbot/chrome.gpu.fyi.json b/testing/buildbot/chrome.gpu.fyi.json
index 690a813..2ab1652 100644
--- a/testing/buildbot/chrome.gpu.fyi.json
+++ b/testing/buildbot/chrome.gpu.fyi.json
@@ -21,6 +21,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "context_lost_passthrough_tests JACUZZI_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -51,6 +52,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "expected_color_pixel_passthrough_test JACUZZI_RELEASE_LKGM",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -81,6 +83,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "gpu_process_launch_tests JACUZZI_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -106,6 +109,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "hardware_accelerated_feature_tests JACUZZI_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -135,6 +139,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --force_high_performance_gpu",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "info_collection_tests JACUZZI_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -165,6 +170,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "pixel_skia_gold_passthrough_test JACUZZI_RELEASE_LKGM",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -196,6 +202,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "screenshot_sync_passthrough_tests JACUZZI_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -221,6 +228,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "trace_test JACUZZI_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -246,6 +254,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webcodecs_tests JACUZZI_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -273,6 +282,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle --use-angle=gles --force_high_performance_gpu",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl2_conformance_gles_passthrough_tests JACUZZI_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -300,6 +310,7 @@
         "cros_board": "jacuzzi",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-angle=gles --use-cmd-decoder=passthrough --use-gl=angle --force_high_performance_gpu",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl_conformance_gles_passthrough_tests JACUZZI_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -334,6 +345,7 @@
         "dut_pool": "chrome-gpu",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "noop_sleep_tests GPU_BRYA_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -367,6 +379,7 @@
         "dut_pool": "chrome-gpu",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "noop_sleep_tests GPU_CORSOLA_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
@@ -400,6 +413,7 @@
         "dut_pool": "chrome-gpu",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc",
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "noop_sleep_tests GPU_SKYRIM_RELEASE_LKGM",
         "resultdb": {
           "result_format": "native"
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json
index 33bbc4fa..4d55b92 100644
--- a/testing/buildbot/chrome.json
+++ b/testing/buildbot/chrome.json
@@ -35,6 +35,7 @@
         ],
         "dut_pool": "vmlab",
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -66,6 +67,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -86,6 +88,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -101,6 +104,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -131,6 +135,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ui/aura:aura_unittests",
+        "module_scheme": "gtest",
         "name": "aura_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -146,6 +151,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -165,6 +171,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//media/capture:capture_unittests",
+        "module_scheme": "gtest",
         "name": "capture_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -180,6 +187,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//cc:cc_unittests",
+        "module_scheme": "gtest",
         "name": "cc_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -207,6 +215,7 @@
         ],
         "dut_pool": "vmlab",
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -238,6 +247,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -258,6 +268,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -273,6 +284,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -288,6 +300,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//crypto:crypto_unittests",
+        "module_scheme": "gtest",
         "name": "crypto_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -303,6 +316,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ui/display:display_unittests",
+        "module_scheme": "gtest",
         "name": "display_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -327,6 +341,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest",
+        "module_scheme": "gtest",
         "name": "fake_libva_driver_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -341,6 +356,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//google_apis:google_apis_unittests",
+        "module_scheme": "gtest",
         "name": "google_apis_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -356,6 +372,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ipc:ipc_tests",
+        "module_scheme": "gtest",
         "name": "ipc_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -371,6 +388,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ui/latency:latency_unittests",
+        "module_scheme": "gtest",
         "name": "latency_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -389,6 +407,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//media:media_unittests",
+        "module_scheme": "gtest",
         "name": "media_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -404,6 +423,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//media/midi:midi_unittests",
+        "module_scheme": "gtest",
         "name": "midi_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -419,6 +439,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//mojo:mojo_unittests",
+        "module_scheme": "gtest",
         "name": "mojo_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -437,6 +458,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//net:net_unittests",
+        "module_scheme": "gtest",
         "name": "net_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -455,6 +477,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ui/ozone/gl:ozone_gl_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_gl_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -470,6 +493,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ui/ozone:ozone_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -485,6 +509,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//pdf:pdf_unittests",
+        "module_scheme": "gtest",
         "name": "pdf_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -500,6 +525,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//printing:printing_unittests",
+        "module_scheme": "gtest",
         "name": "printing_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -519,6 +545,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//chrome/browser/metrics/perf:profile_provider_unittest",
+        "module_scheme": "gtest",
         "name": "profile_provider_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -534,6 +561,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//testing/rust_gtest_interop:rust_gtest_interop_unittests",
+        "module_scheme": "gtest",
         "name": "rust_gtest_interop_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -549,6 +577,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//sql:sql_unittests",
+        "module_scheme": "gtest",
         "name": "sql_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -564,6 +593,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//url:url_unittests",
+        "module_scheme": "gtest",
         "name": "url_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -584,6 +614,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/vaapi:vaapi_unittest",
+        "module_scheme": "gtest",
         "name": "vaapi_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -611,6 +642,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_av1 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -637,6 +669,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_vp8 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -663,6 +696,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_vp9 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -685,6 +719,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ui/aura:aura_unittests",
+        "module_scheme": "gtest",
         "name": "aura_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -700,6 +735,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -719,6 +755,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//media/capture:capture_unittests",
+        "module_scheme": "gtest",
         "name": "capture_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -734,6 +771,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//cc:cc_unittests",
+        "module_scheme": "gtest",
         "name": "cc_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -761,6 +799,7 @@
         ],
         "dut_pool": "vmlab",
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -792,6 +831,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -812,6 +852,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -827,6 +868,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -842,6 +884,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//crypto:crypto_unittests",
+        "module_scheme": "gtest",
         "name": "crypto_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -857,6 +900,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ui/display:display_unittests",
+        "module_scheme": "gtest",
         "name": "display_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -881,6 +925,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest",
+        "module_scheme": "gtest",
         "name": "fake_libva_driver_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -895,6 +940,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//google_apis:google_apis_unittests",
+        "module_scheme": "gtest",
         "name": "google_apis_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -910,6 +956,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ipc:ipc_tests",
+        "module_scheme": "gtest",
         "name": "ipc_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -925,6 +972,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ui/latency:latency_unittests",
+        "module_scheme": "gtest",
         "name": "latency_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -943,6 +991,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//media:media_unittests",
+        "module_scheme": "gtest",
         "name": "media_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -958,6 +1007,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//media/midi:midi_unittests",
+        "module_scheme": "gtest",
         "name": "midi_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -973,6 +1023,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//mojo:mojo_unittests",
+        "module_scheme": "gtest",
         "name": "mojo_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -991,6 +1042,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//net:net_unittests",
+        "module_scheme": "gtest",
         "name": "net_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1009,6 +1061,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ui/ozone/gl:ozone_gl_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_gl_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1024,6 +1077,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//ui/ozone:ozone_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1039,6 +1093,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//pdf:pdf_unittests",
+        "module_scheme": "gtest",
         "name": "pdf_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1054,6 +1109,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//printing:printing_unittests",
+        "module_scheme": "gtest",
         "name": "printing_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1073,6 +1129,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//chrome/browser/metrics/perf:profile_provider_unittest",
+        "module_scheme": "gtest",
         "name": "profile_provider_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1088,6 +1145,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//testing/rust_gtest_interop:rust_gtest_interop_unittests",
+        "module_scheme": "gtest",
         "name": "rust_gtest_interop_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1103,6 +1161,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//sql:sql_unittests",
+        "module_scheme": "gtest",
         "name": "sql_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1118,6 +1177,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//url:url_unittests",
+        "module_scheme": "gtest",
         "name": "url_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1138,6 +1198,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/vaapi:vaapi_unittest",
+        "module_scheme": "gtest",
         "name": "vaapi_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1165,6 +1226,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_av1 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1191,6 +1253,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_vp8 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1217,6 +1280,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_vp9 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1247,6 +1311,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/aura:aura_unittests",
+        "module_scheme": "gtest",
         "name": "aura_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1262,6 +1327,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1281,6 +1347,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/capture:capture_unittests",
+        "module_scheme": "gtest",
         "name": "capture_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1296,6 +1363,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//cc:cc_unittests",
+        "module_scheme": "gtest",
         "name": "cc_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1323,6 +1391,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -1354,6 +1423,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -1374,6 +1444,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -1389,6 +1460,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1404,6 +1476,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//crypto:crypto_unittests",
+        "module_scheme": "gtest",
         "name": "crypto_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1419,6 +1492,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/display:display_unittests",
+        "module_scheme": "gtest",
         "name": "display_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1443,6 +1517,7 @@
         "cros_model": "kano",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest",
+        "module_scheme": "gtest",
         "name": "fake_libva_driver_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1457,6 +1532,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//google_apis:google_apis_unittests",
+        "module_scheme": "gtest",
         "name": "google_apis_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1472,6 +1548,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ipc:ipc_tests",
+        "module_scheme": "gtest",
         "name": "ipc_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1487,6 +1564,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/latency:latency_unittests",
+        "module_scheme": "gtest",
         "name": "latency_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1505,6 +1583,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media:media_unittests",
+        "module_scheme": "gtest",
         "name": "media_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1520,6 +1599,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/midi:midi_unittests",
+        "module_scheme": "gtest",
         "name": "midi_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1535,6 +1615,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//mojo:mojo_unittests",
+        "module_scheme": "gtest",
         "name": "mojo_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1553,6 +1634,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/ozone/gl:ozone_gl_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_gl_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1568,6 +1650,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/ozone:ozone_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1583,6 +1666,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//pdf:pdf_unittests",
+        "module_scheme": "gtest",
         "name": "pdf_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1598,6 +1682,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//printing:printing_unittests",
+        "module_scheme": "gtest",
         "name": "printing_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1617,6 +1702,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//chrome/browser/metrics/perf:profile_provider_unittest",
+        "module_scheme": "gtest",
         "name": "profile_provider_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1632,6 +1718,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//testing/rust_gtest_interop:rust_gtest_interop_unittests",
+        "module_scheme": "gtest",
         "name": "rust_gtest_interop_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1647,6 +1734,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//sql:sql_unittests",
+        "module_scheme": "gtest",
         "name": "sql_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1662,6 +1750,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//url:url_unittests",
+        "module_scheme": "gtest",
         "name": "url_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1681,6 +1770,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/gpu/vaapi:vaapi_unittest",
+        "module_scheme": "gtest",
         "name": "vaapi_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1708,6 +1798,7 @@
         "cros_model": "kano",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_av1 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1734,6 +1825,7 @@
         "cros_model": "kano",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_vp8 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1759,6 +1851,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_vp9 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1781,6 +1874,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/aura:aura_unittests",
+        "module_scheme": "gtest",
         "name": "aura_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1796,6 +1890,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1815,6 +1910,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/capture:capture_unittests",
+        "module_scheme": "gtest",
         "name": "capture_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1830,6 +1926,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//cc:cc_unittests",
+        "module_scheme": "gtest",
         "name": "cc_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1857,6 +1954,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -1888,6 +1986,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -1908,6 +2007,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -1923,6 +2023,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1938,6 +2039,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//crypto:crypto_unittests",
+        "module_scheme": "gtest",
         "name": "crypto_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1953,6 +2055,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/display:display_unittests",
+        "module_scheme": "gtest",
         "name": "display_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1977,6 +2080,7 @@
         "cros_model": "kano",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest",
+        "module_scheme": "gtest",
         "name": "fake_libva_driver_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -1991,6 +2095,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//google_apis:google_apis_unittests",
+        "module_scheme": "gtest",
         "name": "google_apis_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2006,6 +2111,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ipc:ipc_tests",
+        "module_scheme": "gtest",
         "name": "ipc_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2021,6 +2127,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/latency:latency_unittests",
+        "module_scheme": "gtest",
         "name": "latency_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2039,6 +2146,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media:media_unittests",
+        "module_scheme": "gtest",
         "name": "media_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2054,6 +2162,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/midi:midi_unittests",
+        "module_scheme": "gtest",
         "name": "midi_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2069,6 +2178,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//mojo:mojo_unittests",
+        "module_scheme": "gtest",
         "name": "mojo_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2087,6 +2197,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/ozone/gl:ozone_gl_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_gl_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2102,6 +2213,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/ozone:ozone_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2117,6 +2229,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//pdf:pdf_unittests",
+        "module_scheme": "gtest",
         "name": "pdf_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2132,6 +2245,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//printing:printing_unittests",
+        "module_scheme": "gtest",
         "name": "printing_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2151,6 +2265,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//chrome/browser/metrics/perf:profile_provider_unittest",
+        "module_scheme": "gtest",
         "name": "profile_provider_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2166,6 +2281,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//testing/rust_gtest_interop:rust_gtest_interop_unittests",
+        "module_scheme": "gtest",
         "name": "rust_gtest_interop_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2181,6 +2297,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//sql:sql_unittests",
+        "module_scheme": "gtest",
         "name": "sql_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2196,6 +2313,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//url:url_unittests",
+        "module_scheme": "gtest",
         "name": "url_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2215,6 +2333,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/gpu/vaapi:vaapi_unittest",
+        "module_scheme": "gtest",
         "name": "vaapi_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2242,6 +2361,7 @@
         "cros_model": "kano",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_av1 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2268,6 +2388,7 @@
         "cros_model": "kano",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_vp8 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2293,6 +2414,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_vp9 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2316,6 +2438,7 @@
         "autotest_name": "chromium",
         "cros_board": "jacuzzi",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2342,6 +2465,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2372,6 +2496,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2391,6 +2516,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2405,6 +2531,7 @@
         "autotest_name": "chromium",
         "cros_board": "jacuzzi",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2428,6 +2555,7 @@
         "autotest_name": "chromium",
         "cros_board": "octopus",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2454,6 +2582,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2491,6 +2620,7 @@
         ],
         "dut_pool": "vmlab",
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2522,6 +2652,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2542,6 +2673,7 @@
         "dut_pool": "vmlab",
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2560,6 +2692,7 @@
         "cros_board": "reven-vmtest",
         "dut_pool": "vmlab",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2583,6 +2716,7 @@
         "autotest_name": "chromium",
         "cros_board": "trogdor",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2609,6 +2743,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2639,6 +2774,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2658,6 +2794,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2672,6 +2809,7 @@
         "autotest_name": "chromium",
         "cros_board": "trogdor",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2698,6 +2836,7 @@
         "autotest_name": "chromium",
         "cros_board": "volteer",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2724,6 +2863,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2754,6 +2894,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2773,6 +2914,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2787,6 +2929,7 @@
         "autotest_name": "chromium",
         "cros_board": "volteer",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2805,6 +2948,7 @@
         "autotest_name": "chromium",
         "cros_board": "volteer",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2831,6 +2975,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2861,6 +3006,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2880,6 +3026,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -2894,6 +3041,7 @@
         "autotest_name": "chromium",
         "cros_board": "volteer",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -2917,6 +3065,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests",
         "swarming": {
           "dimensions": {
@@ -2935,6 +3084,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome:chrome_private_code_test",
+        "module_scheme": "single",
         "name": "chrome_private_code_test",
         "swarming": {
           "dimensions": {
@@ -2954,6 +3104,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "module_name": "//chrome/test:chrome_sizes",
+        "module_scheme": "single",
         "name": "chrome_sizes",
         "resultdb": {
           "enable": true,
@@ -2977,6 +3128,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:variations_smoke_tests",
+        "module_scheme": "single",
         "name": "variations_smoke_tests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -3012,6 +3164,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
+        "module_scheme": "gtest",
         "name": "absl_hardening_tests",
         "swarming": {
           "dimensions": {
@@ -3029,6 +3182,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/accessibility:accessibility_unittests",
+        "module_scheme": "gtest",
         "name": "accessibility_unittests",
         "swarming": {
           "dimensions": {
@@ -3046,6 +3200,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//third_party/angle/src/tests:angle_unittests",
+        "module_scheme": "gtest",
         "name": "angle_unittests",
         "swarming": {
           "dimensions": {
@@ -3064,6 +3219,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions/shell:app_shell_unittests",
+        "module_scheme": "gtest",
         "name": "app_shell_unittests",
         "swarming": {
           "dimensions": {
@@ -3081,6 +3237,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chromeos/ash/experiences:ash_components_unittests",
+        "module_scheme": "gtest",
         "name": "ash_components_unittests",
         "swarming": {
           "dimensions": {
@@ -3098,6 +3255,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ash:ash_unittests",
+        "module_scheme": "gtest",
         "name": "ash_unittests",
         "swarming": {
           "dimensions": {
@@ -3116,6 +3274,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ash/webui:ash_webui_unittests",
+        "module_scheme": "gtest",
         "name": "ash_webui_unittests",
         "swarming": {
           "dimensions": {
@@ -3133,6 +3292,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/aura:aura_unittests",
+        "module_scheme": "gtest",
         "name": "aura_unittests",
         "swarming": {
           "dimensions": {
@@ -3150,6 +3310,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests",
         "swarming": {
           "dimensions": {
@@ -3167,6 +3328,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/common:blink_common_unittests",
+        "module_scheme": "gtest",
         "name": "blink_common_unittests",
         "swarming": {
           "dimensions": {
@@ -3184,6 +3346,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/platform:blink_fuzzer_unittests",
+        "module_scheme": "gtest",
         "name": "blink_fuzzer_unittests",
         "swarming": {
           "dimensions": {
@@ -3201,6 +3364,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/platform/heap:blink_heap_unittests",
+        "module_scheme": "gtest",
         "name": "blink_heap_unittests",
         "swarming": {
           "dimensions": {
@@ -3221,6 +3385,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/platform:blink_platform_unittests",
+        "module_scheme": "gtest",
         "name": "blink_platform_unittests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -3243,6 +3408,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/controller:blink_unittests",
+        "module_scheme": "gtest",
         "name": "blink_unittests",
         "swarming": {
           "dimensions": {
@@ -3260,6 +3426,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
+        "module_scheme": "gtest",
         "name": "boringssl_crypto_tests",
         "swarming": {
           "dimensions": {
@@ -3277,6 +3444,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
+        "module_scheme": "gtest",
         "name": "boringssl_ssl_tests",
         "swarming": {
           "dimensions": {
@@ -3297,6 +3465,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:browser_tests",
+        "module_scheme": "gtest",
         "name": "browser_tests",
         "swarming": {
           "dimensions": {
@@ -3318,6 +3487,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//media/capture:capture_unittests",
+        "module_scheme": "gtest",
         "name": "capture_unittests",
         "swarming": {
           "dimensions": {
@@ -3335,6 +3505,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//media/cast:cast_unittests",
+        "module_scheme": "gtest",
         "name": "cast_unittests",
         "swarming": {
           "dimensions": {
@@ -3352,6 +3523,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//cc:cc_unittests",
+        "module_scheme": "gtest",
         "name": "cc_unittests",
         "swarming": {
           "dimensions": {
@@ -3369,6 +3541,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:chrome_app_unittests",
+        "module_scheme": "gtest",
         "name": "chrome_app_unittests",
         "swarming": {
           "dimensions": {
@@ -3386,6 +3559,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test/chromedriver:chromedriver_unittests",
+        "module_scheme": "gtest",
         "name": "chromedriver_unittests",
         "swarming": {
           "dimensions": {
@@ -3403,6 +3577,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chromeos/components:chromeos_components_unittests",
+        "module_scheme": "gtest",
         "name": "chromeos_components_unittests",
         "swarming": {
           "dimensions": {
@@ -3420,6 +3595,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chromeos:chromeos_unittests",
+        "module_scheme": "gtest",
         "name": "chromeos_unittests",
         "swarming": {
           "dimensions": {
@@ -3437,6 +3613,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components:components_browsertests",
+        "module_scheme": "gtest",
         "name": "components_browsertests",
         "swarming": {
           "dimensions": {
@@ -3454,6 +3631,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components:components_unittests",
+        "module_scheme": "gtest",
         "name": "components_unittests",
         "swarming": {
           "dimensions": {
@@ -3472,6 +3650,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/compositor:compositor_unittests",
+        "module_scheme": "gtest",
         "name": "compositor_unittests",
         "swarming": {
           "dimensions": {
@@ -3489,6 +3668,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//content/test:content_browsertests",
+        "module_scheme": "gtest",
         "name": "content_browsertests",
         "swarming": {
           "dimensions": {
@@ -3507,6 +3687,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//content/test:content_unittests",
+        "module_scheme": "gtest",
         "name": "content_unittests",
         "swarming": {
           "dimensions": {
@@ -3524,6 +3705,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/crashpad/crashpad:crashpad_tests",
+        "module_scheme": "gtest",
         "name": "crashpad_tests",
         "swarming": {
           "dimensions": {
@@ -3541,6 +3723,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//crypto:crypto_unittests",
+        "module_scheme": "gtest",
         "name": "crypto_unittests",
         "swarming": {
           "dimensions": {
@@ -3558,6 +3741,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//dbus:dbus_unittests",
+        "module_scheme": "gtest",
         "name": "dbus_unittests",
         "swarming": {
           "dimensions": {
@@ -3575,6 +3759,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//device:device_unittests",
+        "module_scheme": "gtest",
         "name": "device_unittests",
         "swarming": {
           "dimensions": {
@@ -3592,6 +3777,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/display:display_unittests",
+        "module_scheme": "gtest",
         "name": "display_unittests",
         "swarming": {
           "dimensions": {
@@ -3610,6 +3796,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/leveldatabase:env_chromium_unittests",
+        "module_scheme": "gtest",
         "name": "env_chromium_unittests",
         "swarming": {
           "dimensions": {
@@ -3627,6 +3814,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/events:events_unittests",
+        "module_scheme": "gtest",
         "name": "events_unittests",
         "swarming": {
           "dimensions": {
@@ -3644,6 +3832,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/exo:exo_unittests",
+        "module_scheme": "gtest",
         "name": "exo_unittests",
         "swarming": {
           "dimensions": {
@@ -3661,6 +3850,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions:extensions_browsertests",
+        "module_scheme": "gtest",
         "name": "extensions_browsertests",
         "swarming": {
           "dimensions": {
@@ -3678,6 +3868,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions:extensions_unittests",
+        "module_scheme": "gtest",
         "name": "extensions_unittests",
         "swarming": {
           "dimensions": {
@@ -3695,6 +3886,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/services/filesystem:filesystem_service_unittests",
+        "module_scheme": "gtest",
         "name": "filesystem_service_unittests",
         "swarming": {
           "dimensions": {
@@ -3712,6 +3904,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//testing/libfuzzer/tests:fuzzing_unittests",
+        "module_scheme": "gtest",
         "name": "fuzzing_unittests",
         "swarming": {
           "dimensions": {
@@ -3729,6 +3922,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//google_apis/gcm:gcm_unit_tests",
+        "module_scheme": "gtest",
         "name": "gcm_unit_tests",
         "swarming": {
           "dimensions": {
@@ -3746,6 +3940,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/gfx:gfx_unittests",
+        "module_scheme": "gtest",
         "name": "gfx_unittests",
         "swarming": {
           "dimensions": {
@@ -3763,6 +3958,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//gin:gin_unittests",
+        "module_scheme": "gtest",
         "name": "gin_unittests",
         "swarming": {
           "dimensions": {
@@ -3780,6 +3976,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/gl:gl_unittests_ozone",
+        "module_scheme": "gtest",
         "name": "gl_unittests_ozone",
         "swarming": {
           "dimensions": {
@@ -3797,6 +3994,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//google_apis:google_apis_unittests",
+        "module_scheme": "gtest",
         "name": "google_apis_unittests",
         "swarming": {
           "dimensions": {
@@ -3814,6 +4012,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//gpu:gpu_unittests",
+        "module_scheme": "gtest",
         "name": "gpu_unittests",
         "swarming": {
           "dimensions": {
@@ -3831,6 +4030,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
+        "module_scheme": "gtest",
         "name": "gwp_asan_unittests",
         "swarming": {
           "dimensions": {
@@ -3851,6 +4051,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:interactive_ui_tests",
+        "module_scheme": "gtest",
         "name": "interactive_ui_tests",
         "swarming": {
           "dimensions": {
@@ -3869,6 +4070,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ipc:ipc_tests",
+        "module_scheme": "gtest",
         "name": "ipc_tests",
         "swarming": {
           "dimensions": {
@@ -3886,6 +4088,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ash/keyboard/ui:keyboard_unittests",
+        "module_scheme": "gtest",
         "name": "keyboard_unittests",
         "swarming": {
           "dimensions": {
@@ -3903,6 +4106,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/latency:latency_unittests",
+        "module_scheme": "gtest",
         "name": "latency_unittests",
         "swarming": {
           "dimensions": {
@@ -3921,6 +4125,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/leveldatabase:leveldb_unittests",
+        "module_scheme": "gtest",
         "name": "leveldb_unittests",
         "swarming": {
           "dimensions": {
@@ -3938,6 +4143,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/libjingle_xmpp:libjingle_xmpp_unittests",
+        "module_scheme": "gtest",
         "name": "libjingle_xmpp_unittests",
         "swarming": {
           "dimensions": {
@@ -3955,6 +4161,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/liburlpattern:liburlpattern_unittests",
+        "module_scheme": "gtest",
         "name": "liburlpattern_unittests",
         "swarming": {
           "dimensions": {
@@ -3972,6 +4179,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//media:media_unittests",
+        "module_scheme": "gtest",
         "name": "media_unittests",
         "swarming": {
           "dimensions": {
@@ -3989,6 +4197,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/message_center:message_center_unittests",
+        "module_scheme": "gtest",
         "name": "message_center_unittests",
         "swarming": {
           "dimensions": {
@@ -4006,6 +4215,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//media/midi:midi_unittests",
+        "module_scheme": "gtest",
         "name": "midi_unittests",
         "swarming": {
           "dimensions": {
@@ -4023,6 +4233,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//mojo:mojo_unittests",
+        "module_scheme": "gtest",
         "name": "mojo_unittests",
         "swarming": {
           "dimensions": {
@@ -4040,6 +4251,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/native_theme:native_theme_unittests",
+        "module_scheme": "gtest",
         "name": "native_theme_unittests",
         "swarming": {
           "dimensions": {
@@ -4057,6 +4269,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//net:net_unittests",
+        "module_scheme": "gtest",
         "name": "net_unittests",
         "swarming": {
           "dimensions": {
@@ -4077,6 +4290,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/ozone/gl:ozone_gl_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_gl_unittests",
         "swarming": {
           "dimensions": {
@@ -4097,6 +4311,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/ozone:ozone_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_unittests",
         "swarming": {
           "dimensions": {
@@ -4114,6 +4329,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/ozone:ozone_x11_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_x11_unittests",
         "swarming": {
           "dimensions": {
@@ -4131,6 +4347,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//pdf:pdf_unittests",
+        "module_scheme": "gtest",
         "name": "pdf_unittests",
         "swarming": {
           "dimensions": {
@@ -4148,6 +4365,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/perfetto:perfetto_unittests",
+        "module_scheme": "gtest",
         "name": "perfetto_unittests",
         "swarming": {
           "dimensions": {
@@ -4165,6 +4383,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//printing:printing_unittests",
+        "module_scheme": "gtest",
         "name": "printing_unittests",
         "swarming": {
           "dimensions": {
@@ -4183,6 +4402,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/pthreadpool:pthreadpool_unittests",
+        "module_scheme": "gtest",
         "name": "pthreadpool_unittests",
         "swarming": {
           "dimensions": {
@@ -4200,6 +4420,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//remoting:remoting_unittests",
+        "module_scheme": "gtest",
         "name": "remoting_unittests",
         "swarming": {
           "dimensions": {
@@ -4217,6 +4438,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//sandbox/linux:sandbox_linux_unittests",
+        "module_scheme": "gtest",
         "name": "sandbox_linux_unittests",
         "swarming": {
           "dimensions": {
@@ -4234,6 +4456,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "services_unittests",
         "swarming": {
           "dimensions": {
@@ -4251,6 +4474,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/shell_dialogs:shell_dialogs_unittests",
+        "module_scheme": "gtest",
         "name": "shell_dialogs_unittests",
         "swarming": {
           "dimensions": {
@@ -4268,6 +4492,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/shell-encryption:shell_encryption_unittests",
+        "module_scheme": "gtest",
         "name": "shell_encryption_unittests",
         "swarming": {
           "dimensions": {
@@ -4285,6 +4510,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//skia:skia_unittests",
+        "module_scheme": "gtest",
         "name": "skia_unittests",
         "swarming": {
           "dimensions": {
@@ -4302,6 +4528,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/snapshot:snapshot_unittests",
+        "module_scheme": "gtest",
         "name": "snapshot_unittests",
         "swarming": {
           "dimensions": {
@@ -4319,6 +4546,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//sql:sql_unittests",
+        "module_scheme": "gtest",
         "name": "sql_unittests",
         "swarming": {
           "dimensions": {
@@ -4336,6 +4564,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//storage:storage_unittests",
+        "module_scheme": "gtest",
         "name": "storage_unittests",
         "swarming": {
           "dimensions": {
@@ -4353,6 +4582,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:sync_integration_tests",
+        "module_scheme": "gtest",
         "name": "sync_integration_tests",
         "swarming": {
           "dimensions": {
@@ -4371,6 +4601,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/base:ui_base_unittests",
+        "module_scheme": "gtest",
         "name": "ui_base_unittests",
         "swarming": {
           "dimensions": {
@@ -4388,6 +4619,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/chromeos:ui_chromeos_unittests",
+        "module_scheme": "gtest",
         "name": "ui_chromeos_unittests",
         "swarming": {
           "dimensions": {
@@ -4405,6 +4637,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/touch_selection:ui_touch_selection_unittests",
+        "module_scheme": "gtest",
         "name": "ui_touch_selection_unittests",
         "swarming": {
           "dimensions": {
@@ -4422,6 +4655,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/tests:ui_unittests",
+        "module_scheme": "gtest",
         "name": "ui_unittests",
         "swarming": {
           "dimensions": {
@@ -4442,6 +4676,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:unit_tests",
+        "module_scheme": "gtest",
         "name": "unit_tests",
         "swarming": {
           "dimensions": {
@@ -4459,6 +4694,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//url:url_unittests",
+        "module_scheme": "gtest",
         "name": "url_unittests",
         "swarming": {
           "dimensions": {
@@ -4477,6 +4713,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/browser/ash/child_accounts/time_limit_consistency_test:usage_time_limit_unittests",
+        "module_scheme": "gtest",
         "name": "usage_time_limit_unittests",
         "swarming": {
           "dimensions": {
@@ -4499,6 +4736,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:browser_tests",
+        "module_scheme": "gtest",
         "name": "views_ax_chromeos_browser_tests",
         "swarming": {
           "dimensions": {
@@ -4516,6 +4754,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/views:views_unittests",
+        "module_scheme": "gtest",
         "name": "views_unittests",
         "swarming": {
           "dimensions": {
@@ -4533,6 +4772,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/viz:viz_unittests",
+        "module_scheme": "gtest",
         "name": "viz_unittests",
         "swarming": {
           "dimensions": {
@@ -4550,6 +4790,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/exo/wayland:wayland_client_perftests",
+        "module_scheme": "gtest",
         "name": "wayland_client_perftests",
         "swarming": {
           "dimensions": {
@@ -4567,6 +4808,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/exo/wayland:wayland_client_tests",
+        "module_scheme": "gtest",
         "name": "wayland_client_tests",
         "swarming": {
           "dimensions": {
@@ -4584,6 +4826,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/wm:wm_unittests",
+        "module_scheme": "gtest",
         "name": "wm_unittests",
         "swarming": {
           "dimensions": {
@@ -4601,6 +4844,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/platform/wtf:wtf_unittests",
+        "module_scheme": "gtest",
         "name": "wtf_unittests",
         "swarming": {
           "dimensions": {
@@ -4618,6 +4862,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/zlib:zlib_unittests",
+        "module_scheme": "gtest",
         "name": "zlib_unittests",
         "swarming": {
           "dimensions": {
@@ -4640,6 +4885,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "module_name": "//chrome/test:chrome_sizes",
+        "module_scheme": "single",
         "name": "chrome_sizes",
         "resultdb": {
           "enable": true,
@@ -4669,6 +4915,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "ppapi_blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -4702,6 +4949,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "module_name": "//chrome/test:chrome_sizes",
+        "module_scheme": "single",
         "name": "chrome_sizes",
         "resultdb": {
           "enable": true,
@@ -4726,6 +4974,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:variations_smoke_tests",
+        "module_scheme": "single",
         "name": "variations_smoke_tests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -4765,6 +5014,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests",
         "swarming": {
           "dimensions": {
@@ -4786,6 +5036,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "module_name": "//chrome/test:chrome_sizes",
+        "module_scheme": "single",
         "name": "chrome_sizes",
         "resultdb": {
           "enable": true,
@@ -4810,6 +5061,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:variations_smoke_tests",
+        "module_scheme": "single",
         "name": "variations_smoke_tests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -4845,6 +5097,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "module_name": "//chrome/test:chrome_sizes",
+        "module_scheme": "single",
         "name": "chrome_sizes",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/chromeos.preuprev.json b/testing/buildbot/chromeos.preuprev.json
index 7a94251..3198fa4 100644
--- a/testing/buildbot/chromeos.preuprev.json
+++ b/testing/buildbot/chromeos.preuprev.json
@@ -11,6 +11,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -38,6 +39,7 @@
         ],
         "dut_pool": "vmlab",
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -54,6 +56,7 @@
         "cros_board": "betty",
         "dut_pool": "vmlab",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -76,6 +79,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -103,6 +107,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -119,6 +124,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -140,6 +146,7 @@
         "autotest_name": "chromium",
         "cros_board": "jacuzzi",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -166,6 +173,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -181,6 +189,7 @@
         "autotest_name": "chromium",
         "cros_board": "jacuzzi",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -203,6 +212,7 @@
         "cros_board": "reven-vmtest",
         "dut_pool": "vmlab",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -230,6 +240,7 @@
         ],
         "dut_pool": "vmlab",
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -249,6 +260,7 @@
         "cros_board": "reven-vmtest",
         "dut_pool": "vmlab",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -270,6 +282,7 @@
         "autotest_name": "chromium",
         "cros_board": "volteer",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -296,6 +309,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -311,6 +325,7 @@
         "autotest_name": "chromium",
         "cros_board": "volteer",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -336,6 +351,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/abseil-cpp:absl_hardening_tests",
+        "module_scheme": "gtest",
         "name": "absl_hardening_tests",
         "swarming": {
           "dimensions": {
@@ -353,6 +369,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/accessibility:accessibility_unittests",
+        "module_scheme": "gtest",
         "name": "accessibility_unittests",
         "swarming": {
           "dimensions": {
@@ -370,6 +387,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//third_party/angle/src/tests:angle_unittests",
+        "module_scheme": "gtest",
         "name": "angle_unittests",
         "swarming": {
           "dimensions": {
@@ -388,6 +406,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions/shell:app_shell_unittests",
+        "module_scheme": "gtest",
         "name": "app_shell_unittests",
         "swarming": {
           "dimensions": {
@@ -405,6 +424,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chromeos/ash/experiences:ash_components_unittests",
+        "module_scheme": "gtest",
         "name": "ash_components_unittests",
         "swarming": {
           "dimensions": {
@@ -422,6 +442,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ash:ash_unittests",
+        "module_scheme": "gtest",
         "name": "ash_unittests",
         "swarming": {
           "dimensions": {
@@ -440,6 +461,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ash/webui:ash_webui_unittests",
+        "module_scheme": "gtest",
         "name": "ash_webui_unittests",
         "swarming": {
           "dimensions": {
@@ -457,6 +479,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/aura:aura_unittests",
+        "module_scheme": "gtest",
         "name": "aura_unittests",
         "swarming": {
           "dimensions": {
@@ -474,6 +497,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests",
         "swarming": {
           "dimensions": {
@@ -491,6 +515,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/common:blink_common_unittests",
+        "module_scheme": "gtest",
         "name": "blink_common_unittests",
         "swarming": {
           "dimensions": {
@@ -508,6 +533,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/platform:blink_fuzzer_unittests",
+        "module_scheme": "gtest",
         "name": "blink_fuzzer_unittests",
         "swarming": {
           "dimensions": {
@@ -525,6 +551,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/platform/heap:blink_heap_unittests",
+        "module_scheme": "gtest",
         "name": "blink_heap_unittests",
         "swarming": {
           "dimensions": {
@@ -545,6 +572,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/platform:blink_platform_unittests",
+        "module_scheme": "gtest",
         "name": "blink_platform_unittests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -567,6 +595,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/controller:blink_unittests",
+        "module_scheme": "gtest",
         "name": "blink_unittests",
         "swarming": {
           "dimensions": {
@@ -584,6 +613,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/boringssl:boringssl_crypto_tests",
+        "module_scheme": "gtest",
         "name": "boringssl_crypto_tests",
         "swarming": {
           "dimensions": {
@@ -601,6 +631,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/boringssl:boringssl_ssl_tests",
+        "module_scheme": "gtest",
         "name": "boringssl_ssl_tests",
         "swarming": {
           "dimensions": {
@@ -621,6 +652,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//media/capture:capture_unittests",
+        "module_scheme": "gtest",
         "name": "capture_unittests",
         "swarming": {
           "dimensions": {
@@ -638,6 +670,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//media/cast:cast_unittests",
+        "module_scheme": "gtest",
         "name": "cast_unittests",
         "swarming": {
           "dimensions": {
@@ -655,6 +688,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//cc:cc_unittests",
+        "module_scheme": "gtest",
         "name": "cc_unittests",
         "swarming": {
           "dimensions": {
@@ -672,6 +706,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:chrome_app_unittests",
+        "module_scheme": "gtest",
         "name": "chrome_app_unittests",
         "swarming": {
           "dimensions": {
@@ -689,6 +724,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test/chromedriver:chromedriver_unittests",
+        "module_scheme": "gtest",
         "name": "chromedriver_unittests",
         "swarming": {
           "dimensions": {
@@ -706,6 +742,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chromeos/components:chromeos_components_unittests",
+        "module_scheme": "gtest",
         "name": "chromeos_components_unittests",
         "swarming": {
           "dimensions": {
@@ -723,6 +760,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chromeos:chromeos_unittests",
+        "module_scheme": "gtest",
         "name": "chromeos_unittests",
         "swarming": {
           "dimensions": {
@@ -740,6 +778,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components:components_browsertests",
+        "module_scheme": "gtest",
         "name": "components_browsertests",
         "swarming": {
           "dimensions": {
@@ -757,6 +796,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components:components_unittests",
+        "module_scheme": "gtest",
         "name": "components_unittests",
         "swarming": {
           "dimensions": {
@@ -775,6 +815,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/compositor:compositor_unittests",
+        "module_scheme": "gtest",
         "name": "compositor_unittests",
         "swarming": {
           "dimensions": {
@@ -792,6 +833,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//content/test:content_unittests",
+        "module_scheme": "gtest",
         "name": "content_unittests",
         "swarming": {
           "dimensions": {
@@ -809,6 +851,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/crashpad/crashpad:crashpad_tests",
+        "module_scheme": "gtest",
         "name": "crashpad_tests",
         "swarming": {
           "dimensions": {
@@ -826,6 +869,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//crypto:crypto_unittests",
+        "module_scheme": "gtest",
         "name": "crypto_unittests",
         "swarming": {
           "dimensions": {
@@ -843,6 +887,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//dbus:dbus_unittests",
+        "module_scheme": "gtest",
         "name": "dbus_unittests",
         "swarming": {
           "dimensions": {
@@ -860,6 +905,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//device:device_unittests",
+        "module_scheme": "gtest",
         "name": "device_unittests",
         "swarming": {
           "dimensions": {
@@ -877,6 +923,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/display:display_unittests",
+        "module_scheme": "gtest",
         "name": "display_unittests",
         "swarming": {
           "dimensions": {
@@ -895,6 +942,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/leveldatabase:env_chromium_unittests",
+        "module_scheme": "gtest",
         "name": "env_chromium_unittests",
         "swarming": {
           "dimensions": {
@@ -912,6 +960,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/events:events_unittests",
+        "module_scheme": "gtest",
         "name": "events_unittests",
         "swarming": {
           "dimensions": {
@@ -929,6 +978,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/exo:exo_unittests",
+        "module_scheme": "gtest",
         "name": "exo_unittests",
         "swarming": {
           "dimensions": {
@@ -946,6 +996,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions:extensions_browsertests",
+        "module_scheme": "gtest",
         "name": "extensions_browsertests",
         "swarming": {
           "dimensions": {
@@ -963,6 +1014,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions:extensions_unittests",
+        "module_scheme": "gtest",
         "name": "extensions_unittests",
         "swarming": {
           "dimensions": {
@@ -980,6 +1032,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/services/filesystem:filesystem_service_unittests",
+        "module_scheme": "gtest",
         "name": "filesystem_service_unittests",
         "swarming": {
           "dimensions": {
@@ -997,6 +1050,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//testing/libfuzzer/tests:fuzzing_unittests",
+        "module_scheme": "gtest",
         "name": "fuzzing_unittests",
         "swarming": {
           "dimensions": {
@@ -1014,6 +1068,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//google_apis/gcm:gcm_unit_tests",
+        "module_scheme": "gtest",
         "name": "gcm_unit_tests",
         "swarming": {
           "dimensions": {
@@ -1031,6 +1086,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/gfx:gfx_unittests",
+        "module_scheme": "gtest",
         "name": "gfx_unittests",
         "swarming": {
           "dimensions": {
@@ -1048,6 +1104,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//gin:gin_unittests",
+        "module_scheme": "gtest",
         "name": "gin_unittests",
         "swarming": {
           "dimensions": {
@@ -1065,6 +1122,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/gl:gl_unittests_ozone",
+        "module_scheme": "gtest",
         "name": "gl_unittests_ozone",
         "swarming": {
           "dimensions": {
@@ -1082,6 +1140,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//google_apis:google_apis_unittests",
+        "module_scheme": "gtest",
         "name": "google_apis_unittests",
         "swarming": {
           "dimensions": {
@@ -1099,6 +1158,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//gpu:gpu_unittests",
+        "module_scheme": "gtest",
         "name": "gpu_unittests",
         "swarming": {
           "dimensions": {
@@ -1116,6 +1176,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/gwp_asan:gwp_asan_unittests",
+        "module_scheme": "gtest",
         "name": "gwp_asan_unittests",
         "swarming": {
           "dimensions": {
@@ -1133,6 +1194,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:interactive_ui_tests",
+        "module_scheme": "gtest",
         "name": "interactive_ui_tests",
         "swarming": {
           "dimensions": {
@@ -1151,6 +1213,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ipc:ipc_tests",
+        "module_scheme": "gtest",
         "name": "ipc_tests",
         "swarming": {
           "dimensions": {
@@ -1168,6 +1231,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ash/keyboard/ui:keyboard_unittests",
+        "module_scheme": "gtest",
         "name": "keyboard_unittests",
         "swarming": {
           "dimensions": {
@@ -1185,6 +1249,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/latency:latency_unittests",
+        "module_scheme": "gtest",
         "name": "latency_unittests",
         "swarming": {
           "dimensions": {
@@ -1203,6 +1268,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/leveldatabase:leveldb_unittests",
+        "module_scheme": "gtest",
         "name": "leveldb_unittests",
         "swarming": {
           "dimensions": {
@@ -1220,6 +1286,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/libjingle_xmpp:libjingle_xmpp_unittests",
+        "module_scheme": "gtest",
         "name": "libjingle_xmpp_unittests",
         "swarming": {
           "dimensions": {
@@ -1237,6 +1304,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/liburlpattern:liburlpattern_unittests",
+        "module_scheme": "gtest",
         "name": "liburlpattern_unittests",
         "swarming": {
           "dimensions": {
@@ -1254,6 +1322,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//media:media_unittests",
+        "module_scheme": "gtest",
         "name": "media_unittests",
         "swarming": {
           "dimensions": {
@@ -1271,6 +1340,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/message_center:message_center_unittests",
+        "module_scheme": "gtest",
         "name": "message_center_unittests",
         "swarming": {
           "dimensions": {
@@ -1288,6 +1358,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//media/midi:midi_unittests",
+        "module_scheme": "gtest",
         "name": "midi_unittests",
         "swarming": {
           "dimensions": {
@@ -1305,6 +1376,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//mojo:mojo_unittests",
+        "module_scheme": "gtest",
         "name": "mojo_unittests",
         "swarming": {
           "dimensions": {
@@ -1322,6 +1394,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/native_theme:native_theme_unittests",
+        "module_scheme": "gtest",
         "name": "native_theme_unittests",
         "swarming": {
           "dimensions": {
@@ -1339,6 +1412,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//net:net_unittests",
+        "module_scheme": "gtest",
         "name": "net_unittests",
         "swarming": {
           "dimensions": {
@@ -1359,6 +1433,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/ozone/gl:ozone_gl_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_gl_unittests",
         "swarming": {
           "dimensions": {
@@ -1379,6 +1454,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/ozone:ozone_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_unittests",
         "swarming": {
           "dimensions": {
@@ -1396,6 +1472,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/ozone:ozone_x11_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_x11_unittests",
         "swarming": {
           "dimensions": {
@@ -1413,6 +1490,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//pdf:pdf_unittests",
+        "module_scheme": "gtest",
         "name": "pdf_unittests",
         "swarming": {
           "dimensions": {
@@ -1430,6 +1508,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/perfetto:perfetto_unittests",
+        "module_scheme": "gtest",
         "name": "perfetto_unittests",
         "swarming": {
           "dimensions": {
@@ -1447,6 +1526,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//printing:printing_unittests",
+        "module_scheme": "gtest",
         "name": "printing_unittests",
         "swarming": {
           "dimensions": {
@@ -1465,6 +1545,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/pthreadpool:pthreadpool_unittests",
+        "module_scheme": "gtest",
         "name": "pthreadpool_unittests",
         "swarming": {
           "dimensions": {
@@ -1482,6 +1563,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//remoting:remoting_unittests",
+        "module_scheme": "gtest",
         "name": "remoting_unittests",
         "swarming": {
           "dimensions": {
@@ -1499,6 +1581,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//sandbox/linux:sandbox_linux_unittests",
+        "module_scheme": "gtest",
         "name": "sandbox_linux_unittests",
         "swarming": {
           "dimensions": {
@@ -1516,6 +1599,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "services_unittests",
         "swarming": {
           "dimensions": {
@@ -1533,6 +1617,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/shell_dialogs:shell_dialogs_unittests",
+        "module_scheme": "gtest",
         "name": "shell_dialogs_unittests",
         "swarming": {
           "dimensions": {
@@ -1550,6 +1635,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/shell-encryption:shell_encryption_unittests",
+        "module_scheme": "gtest",
         "name": "shell_encryption_unittests",
         "swarming": {
           "dimensions": {
@@ -1567,6 +1653,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//skia:skia_unittests",
+        "module_scheme": "gtest",
         "name": "skia_unittests",
         "swarming": {
           "dimensions": {
@@ -1584,6 +1671,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/snapshot:snapshot_unittests",
+        "module_scheme": "gtest",
         "name": "snapshot_unittests",
         "swarming": {
           "dimensions": {
@@ -1601,6 +1689,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//sql:sql_unittests",
+        "module_scheme": "gtest",
         "name": "sql_unittests",
         "swarming": {
           "dimensions": {
@@ -1618,6 +1707,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//storage:storage_unittests",
+        "module_scheme": "gtest",
         "name": "storage_unittests",
         "swarming": {
           "dimensions": {
@@ -1635,6 +1725,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:sync_integration_tests",
+        "module_scheme": "gtest",
         "name": "sync_integration_tests",
         "swarming": {
           "dimensions": {
@@ -1653,6 +1744,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/base:ui_base_unittests",
+        "module_scheme": "gtest",
         "name": "ui_base_unittests",
         "swarming": {
           "dimensions": {
@@ -1670,6 +1762,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/chromeos:ui_chromeos_unittests",
+        "module_scheme": "gtest",
         "name": "ui_chromeos_unittests",
         "swarming": {
           "dimensions": {
@@ -1687,6 +1780,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/touch_selection:ui_touch_selection_unittests",
+        "module_scheme": "gtest",
         "name": "ui_touch_selection_unittests",
         "swarming": {
           "dimensions": {
@@ -1704,6 +1798,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/tests:ui_unittests",
+        "module_scheme": "gtest",
         "name": "ui_unittests",
         "swarming": {
           "dimensions": {
@@ -1724,6 +1819,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:unit_tests",
+        "module_scheme": "gtest",
         "name": "unit_tests",
         "swarming": {
           "dimensions": {
@@ -1741,6 +1837,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//url:url_unittests",
+        "module_scheme": "gtest",
         "name": "url_unittests",
         "swarming": {
           "dimensions": {
@@ -1759,6 +1856,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/browser/ash/child_accounts/time_limit_consistency_test:usage_time_limit_unittests",
+        "module_scheme": "gtest",
         "name": "usage_time_limit_unittests",
         "swarming": {
           "dimensions": {
@@ -1781,6 +1879,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:browser_tests",
+        "module_scheme": "gtest",
         "name": "views_ax_chromeos_browser_tests",
         "swarming": {
           "dimensions": {
@@ -1798,6 +1897,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/views:views_unittests",
+        "module_scheme": "gtest",
         "name": "views_unittests",
         "swarming": {
           "dimensions": {
@@ -1815,6 +1915,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/viz:viz_unittests",
+        "module_scheme": "gtest",
         "name": "viz_unittests",
         "swarming": {
           "dimensions": {
@@ -1832,6 +1933,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/exo/wayland:wayland_client_perftests",
+        "module_scheme": "gtest",
         "name": "wayland_client_perftests",
         "swarming": {
           "dimensions": {
@@ -1849,6 +1951,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/exo/wayland:wayland_client_tests",
+        "module_scheme": "gtest",
         "name": "wayland_client_tests",
         "swarming": {
           "dimensions": {
@@ -1866,6 +1969,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/wm:wm_unittests",
+        "module_scheme": "gtest",
         "name": "wm_unittests",
         "swarming": {
           "dimensions": {
@@ -1883,6 +1987,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/platform/wtf:wtf_unittests",
+        "module_scheme": "gtest",
         "name": "wtf_unittests",
         "swarming": {
           "dimensions": {
@@ -1900,6 +2005,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/zlib:zlib_unittests",
+        "module_scheme": "gtest",
         "name": "zlib_unittests",
         "swarming": {
           "dimensions": {
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json
index cd8978da..b0822e50 100644
--- a/testing/buildbot/chromium.clang.json
+++ b/testing/buildbot/chromium.clang.json
@@ -11,6 +11,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests",
         "swarming": {
           "dimensions": {
@@ -27,6 +28,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/highway:highway_tests",
+        "module_scheme": "gtest",
         "name": "highway_tests",
         "swarming": {
           "dimensions": {
@@ -48,6 +50,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "module_name": "//chrome/test:chrome_sizes",
+        "module_scheme": "single",
         "name": "chrome_sizes",
         "resultdb": {
           "enable": true,
@@ -75,6 +78,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests",
         "swarming": {
           "dimensions": {
@@ -92,6 +96,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/highway:highway_tests",
+        "module_scheme": "gtest",
         "name": "highway_tests",
         "swarming": {
           "dimensions": {
@@ -114,6 +119,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "module_name": "//chrome/test:chrome_sizes",
+        "module_scheme": "single",
         "name": "chrome_sizes",
         "resultdb": {
           "enable": true,
@@ -142,6 +148,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests",
         "swarming": {
           "dimensions": {
@@ -158,6 +165,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/highway:highway_tests",
+        "module_scheme": "gtest",
         "name": "highway_tests",
         "swarming": {
           "dimensions": {
@@ -179,6 +187,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "module_name": "//chrome/test:chrome_sizes",
+        "module_scheme": "single",
         "name": "chrome_sizes",
         "resultdb": {
           "enable": true,
@@ -199,6 +208,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test/mini_installer:mini_installer_tests",
+        "module_scheme": "flat",
         "name": "mini_installer_tests",
         "swarming": {
           "dimensions": {
@@ -217,6 +227,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//tools/polymer:polymer_tools_python_unittests",
+        "module_scheme": "pyunit",
         "name": "polymer_tools_python_unittests",
         "swarming": {
           "dimensions": {
@@ -240,6 +251,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests",
         "swarming": {
           "dimensions": {
@@ -256,6 +268,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/highway:highway_tests",
+        "module_scheme": "gtest",
         "name": "highway_tests",
         "swarming": {
           "dimensions": {
@@ -277,6 +290,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "module_name": "//chrome/test:chrome_sizes",
+        "module_scheme": "single",
         "name": "chrome_sizes",
         "resultdb": {
           "enable": true,
@@ -297,6 +311,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test/mini_installer:mini_installer_tests",
+        "module_scheme": "flat",
         "name": "mini_installer_tests",
         "swarming": {
           "dimensions": {
@@ -315,6 +330,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//tools/polymer:polymer_tools_python_unittests",
+        "module_scheme": "pyunit",
         "name": "polymer_tools_python_unittests",
         "swarming": {
           "dimensions": {
diff --git a/testing/buildbot/client.devtools-frontend.integration.json b/testing/buildbot/client.devtools-frontend.integration.json
index 5041d05b7..2353a3c 100644
--- a/testing/buildbot/client.devtools-frontend.integration.json
+++ b/testing/buildbot/client.devtools-frontend.integration.json
@@ -11,6 +11,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/controller:blink_unittests",
+        "module_scheme": "gtest",
         "name": "blink_unittests",
         "swarming": {
           "dimensions": {
@@ -29,6 +30,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:browser_tests",
+        "module_scheme": "gtest",
         "name": "devtools_browser_tests",
         "swarming": {
           "dimensions": {
@@ -53,6 +55,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -81,6 +84,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/controller:blink_unittests",
+        "module_scheme": "gtest",
         "name": "blink_unittests",
         "swarming": {
           "dimensions": {
@@ -99,6 +103,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:browser_tests",
+        "module_scheme": "gtest",
         "name": "devtools_browser_tests",
         "swarming": {
           "dimensions": {
@@ -123,6 +128,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/client.v8.chromium.json b/testing/buildbot/client.v8.chromium.json
index f3c46d1..4c46623 100644
--- a/testing/buildbot/client.v8.chromium.json
+++ b/testing/buildbot/client.v8.chromium.json
@@ -11,6 +11,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions/shell:app_shell_unittests",
+        "module_scheme": "gtest",
         "name": "app_shell_unittests",
         "swarming": {
           "dimensions": {
@@ -26,6 +27,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:browser_tests",
+        "module_scheme": "gtest",
         "name": "browser_tests",
         "swarming": {
           "dimensions": {
@@ -42,6 +44,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:chrome_app_unittests",
+        "module_scheme": "gtest",
         "name": "chrome_app_unittests",
         "swarming": {
           "dimensions": {
@@ -57,6 +60,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test/chromedriver:chromedriver_unittests",
+        "module_scheme": "gtest",
         "name": "chromedriver_unittests",
         "swarming": {
           "dimensions": {
@@ -72,6 +76,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components:components_browsertests",
+        "module_scheme": "gtest",
         "name": "components_browsertests",
         "swarming": {
           "dimensions": {
@@ -87,6 +92,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components:components_unittests",
+        "module_scheme": "gtest",
         "name": "components_unittests",
         "swarming": {
           "dimensions": {
@@ -102,6 +108,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/compositor:compositor_unittests",
+        "module_scheme": "gtest",
         "name": "compositor_unittests",
         "swarming": {
           "dimensions": {
@@ -117,6 +124,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//content/test:content_browsertests",
+        "module_scheme": "gtest",
         "name": "content_browsertests",
         "swarming": {
           "dimensions": {
@@ -132,6 +140,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//content/test:content_unittests",
+        "module_scheme": "gtest",
         "name": "content_unittests",
         "swarming": {
           "dimensions": {
@@ -147,6 +156,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//device:device_unittests",
+        "module_scheme": "gtest",
         "name": "device_unittests",
         "swarming": {
           "dimensions": {
@@ -162,6 +172,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions:extensions_browsertests",
+        "module_scheme": "gtest",
         "name": "extensions_browsertests",
         "swarming": {
           "dimensions": {
@@ -177,6 +188,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions:extensions_unittests",
+        "module_scheme": "gtest",
         "name": "extensions_unittests",
         "swarming": {
           "dimensions": {
@@ -192,6 +204,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//google_apis/gcm:gcm_unit_tests",
+        "module_scheme": "gtest",
         "name": "gcm_unit_tests",
         "swarming": {
           "dimensions": {
@@ -207,6 +220,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//gin:gin_unittests",
+        "module_scheme": "gtest",
         "name": "gin_unittests",
         "swarming": {
           "dimensions": {
@@ -222,6 +236,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//google_apis:google_apis_unittests",
+        "module_scheme": "gtest",
         "name": "google_apis_unittests",
         "swarming": {
           "dimensions": {
@@ -237,6 +252,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//gpu:gpu_unittests",
+        "module_scheme": "gtest",
         "name": "gpu_unittests",
         "swarming": {
           "dimensions": {
@@ -252,6 +268,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//headless:headless_browsertests",
+        "module_scheme": "gtest",
         "name": "headless_browsertests",
         "swarming": {
           "dimensions": {
@@ -267,6 +284,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//headless:headless_unittests",
+        "module_scheme": "gtest",
         "name": "headless_unittests",
         "swarming": {
           "dimensions": {
@@ -282,6 +300,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:interactive_ui_tests",
+        "module_scheme": "gtest",
         "name": "interactive_ui_tests",
         "swarming": {
           "dimensions": {
@@ -297,6 +316,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//net:net_unittests",
+        "module_scheme": "gtest",
         "name": "net_unittests",
         "swarming": {
           "dimensions": {
@@ -312,6 +332,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//pdf:pdf_unittests",
+        "module_scheme": "gtest",
         "name": "pdf_unittests",
         "swarming": {
           "dimensions": {
@@ -327,6 +348,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//remoting:remoting_unittests",
+        "module_scheme": "gtest",
         "name": "remoting_unittests",
         "swarming": {
           "dimensions": {
@@ -342,6 +364,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "services_unittests",
         "swarming": {
           "dimensions": {
@@ -357,6 +380,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:sync_integration_tests",
+        "module_scheme": "gtest",
         "name": "sync_integration_tests",
         "swarming": {
           "dimensions": {
@@ -373,6 +397,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:unit_tests",
+        "module_scheme": "gtest",
         "name": "unit_tests",
         "swarming": {
           "dimensions": {
@@ -390,6 +415,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//content/shell:content_shell_crash_test",
+        "module_scheme": "single",
         "name": "content_shell_crash_test",
         "resultdb": {
           "enable": true,
@@ -409,6 +435,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_unittests",
+        "module_scheme": "flat",
         "name": "telemetry_gpu_unittests",
         "resultdb": {
           "enable": true
@@ -432,6 +459,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_perf_unittests",
+        "module_scheme": "pyunit",
         "name": "telemetry_perf_unittests",
         "resultdb": {
           "enable": true
@@ -456,6 +484,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_unittests",
+        "module_scheme": "pyunit",
         "name": "telemetry_unittests",
         "resultdb": {
           "enable": true
@@ -483,6 +512,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions/shell:app_shell_unittests",
+        "module_scheme": "gtest",
         "name": "app_shell_unittests",
         "swarming": {
           "dimensions": {
@@ -498,6 +528,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:browser_tests",
+        "module_scheme": "gtest",
         "name": "browser_tests",
         "swarming": {
           "dimensions": {
@@ -514,6 +545,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:chrome_app_unittests",
+        "module_scheme": "gtest",
         "name": "chrome_app_unittests",
         "swarming": {
           "dimensions": {
@@ -529,6 +561,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test/chromedriver:chromedriver_unittests",
+        "module_scheme": "gtest",
         "name": "chromedriver_unittests",
         "swarming": {
           "dimensions": {
@@ -544,6 +577,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components:components_browsertests",
+        "module_scheme": "gtest",
         "name": "components_browsertests",
         "swarming": {
           "dimensions": {
@@ -559,6 +593,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components:components_unittests",
+        "module_scheme": "gtest",
         "name": "components_unittests",
         "swarming": {
           "dimensions": {
@@ -574,6 +609,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//ui/compositor:compositor_unittests",
+        "module_scheme": "gtest",
         "name": "compositor_unittests",
         "swarming": {
           "dimensions": {
@@ -589,6 +625,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//content/test:content_browsertests",
+        "module_scheme": "gtest",
         "name": "content_browsertests",
         "swarming": {
           "dimensions": {
@@ -604,6 +641,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//content/test:content_unittests",
+        "module_scheme": "gtest",
         "name": "content_unittests",
         "swarming": {
           "dimensions": {
@@ -619,6 +657,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//device:device_unittests",
+        "module_scheme": "gtest",
         "name": "device_unittests",
         "swarming": {
           "dimensions": {
@@ -634,6 +673,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions:extensions_browsertests",
+        "module_scheme": "gtest",
         "name": "extensions_browsertests",
         "swarming": {
           "dimensions": {
@@ -649,6 +689,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//extensions:extensions_unittests",
+        "module_scheme": "gtest",
         "name": "extensions_unittests",
         "swarming": {
           "dimensions": {
@@ -664,6 +705,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//google_apis/gcm:gcm_unit_tests",
+        "module_scheme": "gtest",
         "name": "gcm_unit_tests",
         "swarming": {
           "dimensions": {
@@ -679,6 +721,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//gin:gin_unittests",
+        "module_scheme": "gtest",
         "name": "gin_unittests",
         "swarming": {
           "dimensions": {
@@ -694,6 +737,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//google_apis:google_apis_unittests",
+        "module_scheme": "gtest",
         "name": "google_apis_unittests",
         "swarming": {
           "dimensions": {
@@ -709,6 +753,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//gpu:gpu_unittests",
+        "module_scheme": "gtest",
         "name": "gpu_unittests",
         "swarming": {
           "dimensions": {
@@ -724,6 +769,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//headless:headless_browsertests",
+        "module_scheme": "gtest",
         "name": "headless_browsertests",
         "swarming": {
           "dimensions": {
@@ -739,6 +785,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//headless:headless_unittests",
+        "module_scheme": "gtest",
         "name": "headless_unittests",
         "swarming": {
           "dimensions": {
@@ -754,6 +801,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:interactive_ui_tests",
+        "module_scheme": "gtest",
         "name": "interactive_ui_tests",
         "swarming": {
           "dimensions": {
@@ -770,6 +818,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//net:net_unittests",
+        "module_scheme": "gtest",
         "name": "net_unittests",
         "swarming": {
           "dimensions": {
@@ -785,6 +834,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//pdf:pdf_unittests",
+        "module_scheme": "gtest",
         "name": "pdf_unittests",
         "swarming": {
           "dimensions": {
@@ -800,6 +850,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//remoting:remoting_unittests",
+        "module_scheme": "gtest",
         "name": "remoting_unittests",
         "swarming": {
           "dimensions": {
@@ -815,6 +866,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "services_unittests",
         "swarming": {
           "dimensions": {
@@ -830,6 +882,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:sync_integration_tests",
+        "module_scheme": "gtest",
         "name": "sync_integration_tests",
         "swarming": {
           "dimensions": {
@@ -846,6 +899,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:unit_tests",
+        "module_scheme": "gtest",
         "name": "unit_tests",
         "swarming": {
           "dimensions": {
@@ -863,6 +917,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//content/shell:content_shell_crash_test",
+        "module_scheme": "single",
         "name": "content_shell_crash_test",
         "resultdb": {
           "enable": true,
@@ -882,6 +937,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_unittests",
+        "module_scheme": "flat",
         "name": "telemetry_gpu_unittests",
         "resultdb": {
           "enable": true
@@ -905,6 +961,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_unittests",
+        "module_scheme": "pyunit",
         "name": "telemetry_unittests",
         "resultdb": {
           "enable": true
diff --git a/testing/buildbot/client.v8.fyi.json b/testing/buildbot/client.v8.fyi.json
index bf1925e..18ec65e3 100644
--- a/testing/buildbot/client.v8.fyi.json
+++ b/testing/buildbot/client.v8.fyi.json
@@ -20,6 +20,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome",
+        "module_scheme": "flat",
         "name": "context_lost_validating_tests",
         "resultdb": {
           "enable": true,
@@ -61,6 +62,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome",
+        "module_scheme": "flat",
         "name": "expected_color_pixel_validating_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -103,6 +105,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome",
+        "module_scheme": "flat",
         "name": "gpu_process_launch_tests",
         "resultdb": {
           "enable": true,
@@ -140,6 +143,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome",
+        "module_scheme": "flat",
         "name": "hardware_accelerated_feature_tests",
         "resultdb": {
           "enable": true,
@@ -181,6 +185,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome",
+        "module_scheme": "flat",
         "name": "pixel_skia_gold_validating_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -224,6 +229,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome",
+        "module_scheme": "flat",
         "name": "screenshot_sync_validating_tests",
         "resultdb": {
           "enable": true,
@@ -261,6 +267,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome",
+        "module_scheme": "flat",
         "name": "trace_test",
         "resultdb": {
           "enable": true,
@@ -299,6 +306,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome",
+        "module_scheme": "flat",
         "name": "webgl_conformance_gles_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -338,6 +346,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome",
+        "module_scheme": "flat",
         "name": "webgl_conformance_validating_tests",
         "resultdb": {
           "enable": true,
@@ -386,6 +395,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "context_lost_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -423,6 +433,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "expected_color_pixel_passthrough_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -461,6 +472,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "gpu_process_launch_tests",
         "resultdb": {
           "enable": true,
@@ -494,6 +506,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "hardware_accelerated_feature_tests",
         "resultdb": {
           "enable": true,
@@ -531,6 +544,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "pixel_skia_gold_passthrough_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -570,6 +584,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "screenshot_sync_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -603,6 +618,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "trace_test",
         "resultdb": {
           "enable": true,
@@ -640,6 +656,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "vulkan_pixel_skia_gold_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -678,6 +695,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webcodecs_tests",
         "resultdb": {
           "enable": true,
@@ -713,6 +731,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl2_conformance_gl_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -748,6 +767,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl_conformance_gl_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -786,6 +806,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "context_lost_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -823,6 +844,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "expected_color_pixel_passthrough_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -861,6 +883,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "gpu_process_launch_tests",
         "resultdb": {
           "enable": true,
@@ -894,6 +917,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "hardware_accelerated_feature_tests",
         "resultdb": {
           "enable": true,
@@ -931,6 +955,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "pixel_skia_gold_passthrough_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -970,6 +995,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "screenshot_sync_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -1003,6 +1029,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "trace_test",
         "resultdb": {
           "enable": true,
@@ -1040,6 +1067,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "vulkan_pixel_skia_gold_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -1078,6 +1106,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webcodecs_tests",
         "resultdb": {
           "enable": true,
@@ -1112,6 +1141,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl_conformance_gl_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -1150,6 +1180,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "context_lost_gl_passthrough_ganesh_tests",
         "resultdb": {
           "enable": true,
@@ -1184,6 +1215,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "context_lost_metal_passthrough_ganesh_tests",
         "resultdb": {
           "enable": true,
@@ -1218,6 +1250,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "context_lost_metal_passthrough_graphite_tests",
         "resultdb": {
           "enable": true,
@@ -1256,6 +1289,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "expected_color_pixel_gl_passthrough_ganesh_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -1299,6 +1333,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "expected_color_pixel_metal_passthrough_ganesh_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -1342,6 +1377,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "expected_color_pixel_metal_passthrough_graphite_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -1381,6 +1417,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "gpu_process_launch_tests",
         "resultdb": {
           "enable": true,
@@ -1415,6 +1452,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "hardware_accelerated_feature_tests",
         "resultdb": {
           "enable": true,
@@ -1453,6 +1491,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "pixel_skia_gold_gl_passthrough_ganesh_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -1496,6 +1535,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "pixel_skia_gold_metal_passthrough_ganesh_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -1539,6 +1579,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "pixel_skia_gold_metal_passthrough_graphite_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -1579,6 +1620,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "screenshot_sync_gl_passthrough_ganesh_tests",
         "resultdb": {
           "enable": true,
@@ -1614,6 +1656,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "screenshot_sync_metal_passthrough_ganesh_tests",
         "resultdb": {
           "enable": true,
@@ -1649,6 +1692,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "screenshot_sync_metal_passthrough_graphite_tests",
         "resultdb": {
           "enable": true,
@@ -1683,6 +1727,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "trace_test",
         "resultdb": {
           "enable": true,
@@ -1717,6 +1762,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webcodecs_gl_passthrough_ganesh_tests",
         "resultdb": {
           "enable": true,
@@ -1751,6 +1797,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webcodecs_metal_passthrough_ganesh_tests",
         "resultdb": {
           "enable": true,
@@ -1785,6 +1832,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webcodecs_metal_passthrough_graphite_tests",
         "resultdb": {
           "enable": true,
@@ -1820,6 +1868,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl_conformance_gl_passthrough_ganesh_tests",
         "resultdb": {
           "enable": true,
@@ -1857,6 +1906,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl_conformance_metal_passthrough_ganesh_tests",
         "resultdb": {
           "enable": true,
@@ -1893,6 +1943,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl_conformance_metal_passthrough_graphite_tests",
         "resultdb": {
           "enable": true,
@@ -1928,6 +1979,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl_conformance_swangle_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -1962,6 +2014,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webrtc_gl_passthrough_ganesh_tests",
         "resultdb": {
           "enable": true,
@@ -1996,6 +2049,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webrtc_metal_passthrough_ganesh_tests",
         "resultdb": {
           "enable": true,
@@ -2030,6 +2084,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webrtc_metal_passthrough_graphite_tests",
         "resultdb": {
           "enable": true,
@@ -2068,6 +2123,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/controller:blink_unittests",
+        "module_scheme": "gtest",
         "name": "blink_unittests",
         "swarming": {
           "dimensions": {
@@ -2092,6 +2148,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -2120,6 +2177,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_wpt_tests",
+        "module_scheme": "webtest",
         "name": "blink_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2147,6 +2205,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2179,6 +2238,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:headless_shell_wpt",
+        "module_scheme": "webtest",
         "name": "headless_shell_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2207,6 +2267,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/controller:blink_unittests",
+        "module_scheme": "gtest",
         "name": "blink_unittests",
         "swarming": {
           "dimensions": {
@@ -2231,6 +2292,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -2259,6 +2321,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_wpt_tests",
+        "module_scheme": "webtest",
         "name": "blink_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2286,6 +2349,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2318,6 +2382,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:headless_shell_wpt",
+        "module_scheme": "webtest",
         "name": "headless_shell_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2346,6 +2411,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/controller:blink_unittests",
+        "module_scheme": "gtest",
         "name": "blink_unittests",
         "swarming": {
           "dimensions": {
@@ -2371,6 +2437,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -2400,6 +2467,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_wpt_tests",
+        "module_scheme": "webtest",
         "name": "blink_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2427,6 +2495,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2459,6 +2528,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:headless_shell_wpt",
+        "module_scheme": "webtest",
         "name": "headless_shell_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2487,6 +2557,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//third_party/blink/renderer/controller:blink_unittests",
+        "module_scheme": "gtest",
         "name": "blink_unittests",
         "swarming": {
           "dimensions": {
@@ -2512,6 +2583,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -2541,6 +2613,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_wpt_tests",
+        "module_scheme": "webtest",
         "name": "blink_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2569,6 +2642,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2602,6 +2676,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:headless_shell_wpt",
+        "module_scheme": "webtest",
         "name": "headless_shell_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2638,6 +2713,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -2666,6 +2742,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_wpt_tests",
+        "module_scheme": "webtest",
         "name": "blink_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2693,6 +2770,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2725,6 +2803,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:headless_shell_wpt",
+        "module_scheme": "webtest",
         "name": "headless_shell_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -2809,6 +2888,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "context_lost_passthrough_graphite_tests",
         "resultdb": {
           "enable": true,
@@ -2843,6 +2923,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "context_lost_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -2881,6 +2962,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "expected_color_pixel_passthrough_graphite_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -2924,6 +3006,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "expected_color_pixel_passthrough_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -2963,6 +3046,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "gpu_process_launch_tests",
         "resultdb": {
           "enable": true,
@@ -2997,6 +3081,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "hardware_accelerated_feature_tests",
         "resultdb": {
           "enable": true,
@@ -3035,6 +3120,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "pixel_skia_gold_passthrough_graphite_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -3078,6 +3164,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "pixel_skia_gold_passthrough_test",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -3118,6 +3205,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "screenshot_sync_passthrough_graphite_tests",
         "resultdb": {
           "enable": true,
@@ -3153,6 +3241,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "screenshot_sync_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -3187,6 +3276,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "trace_test",
         "resultdb": {
           "enable": true,
@@ -3221,6 +3311,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webcodecs_tests",
         "resultdb": {
           "enable": true,
@@ -3256,6 +3347,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl_conformance_d3d11_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -3292,6 +3384,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webgl_conformance_d3d9_passthrough_tests",
         "resultdb": {
           "enable": true,
@@ -3327,6 +3420,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test:telemetry_gpu_integration_test",
+        "module_scheme": "flat",
         "name": "webrtc_tests",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/generate_buildbot_json.py b/testing/buildbot/generate_buildbot_json.py
index 410f083..dad303e 100755
--- a/testing/buildbot/generate_buildbot_json.py
+++ b/testing/buildbot/generate_buildbot_json.py
@@ -986,7 +986,8 @@
     gn_entry = self.gn_isolate_map[result['test']]
     result['test_id_prefix'] = 'ninja:%s/' % gn_entry['label']
     result['module_name'] = gn_entry['label']
-    module_scheme = gn_entry.get('module_scheme', None)
+    module_scheme = test_config.get('module_scheme') or gn_entry.get(
+        'module_scheme')
     if module_scheme:
       result['module_scheme'] = module_scheme
 
@@ -1163,7 +1164,11 @@
 
           test['test_id_prefix'] = 'ninja:%s/' % label
           test['module_name'] = label
-          module_scheme = gn_entry.get('module_scheme', None)
+          # Allow module_scheme in the test config to override the gn label.
+          # This is useful when a test suite uses a different module scheme
+          # than is supplied by the binary.
+          module_scheme = test.get('module_scheme') or gn_entry.get(
+              'module_scheme')
           if module_scheme:
             test['module_scheme'] = module_scheme
 
diff --git a/testing/buildbot/internal.chrome.fyi.json b/testing/buildbot/internal.chrome.fyi.json
index 3691137..e1499557 100644
--- a/testing/buildbot/internal.chrome.fyi.json
+++ b/testing/buildbot/internal.chrome.fyi.json
@@ -13,6 +13,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test/variations:variations_desktop_smoke_tests",
+        "module_scheme": "flat",
         "name": "variations_android_smoke_tests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -54,6 +55,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test/variations:variations_desktop_smoke_tests",
+        "module_scheme": "flat",
         "name": "variations_webview_smoke_tests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -97,6 +99,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test/variations:variations_desktop_smoke_tests",
+        "module_scheme": "flat",
         "name": "variations_desktop_smoke_tests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -129,6 +132,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test/variations:variations_desktop_smoke_tests",
+        "module_scheme": "flat",
         "name": "variations_desktop_smoke_tests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -162,6 +166,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test/variations:variations_desktop_smoke_tests",
+        "module_scheme": "flat",
         "name": "variations_desktop_smoke_tests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
diff --git a/testing/buildbot/internal.chromeos.fyi.json b/testing/buildbot/internal.chromeos.fyi.json
index 258a804..6bfb3a3 100644
--- a/testing/buildbot/internal.chromeos.fyi.json
+++ b/testing/buildbot/internal.chromeos.fyi.json
@@ -14,6 +14,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//chrome/test/variations:variations_desktop_smoke_tests",
+        "module_scheme": "flat",
         "name": "variations_desktop_smoke_tests",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -63,6 +64,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/aura:aura_unittests",
+        "module_scheme": "gtest",
         "name": "aura_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -78,6 +80,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -97,6 +100,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/capture:capture_unittests",
+        "module_scheme": "gtest",
         "name": "capture_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -112,6 +116,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//cc:cc_unittests",
+        "module_scheme": "gtest",
         "name": "cc_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -139,6 +144,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -170,6 +176,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -190,6 +197,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -205,6 +213,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -220,6 +229,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//crypto:crypto_unittests",
+        "module_scheme": "gtest",
         "name": "crypto_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -235,6 +245,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/display:display_unittests",
+        "module_scheme": "gtest",
         "name": "display_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -259,6 +270,7 @@
         "cros_model": "kano",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest",
+        "module_scheme": "gtest",
         "name": "fake_libva_driver_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -273,6 +285,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//google_apis:google_apis_unittests",
+        "module_scheme": "gtest",
         "name": "google_apis_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -288,6 +301,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ipc:ipc_tests",
+        "module_scheme": "gtest",
         "name": "ipc_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -303,6 +317,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/latency:latency_unittests",
+        "module_scheme": "gtest",
         "name": "latency_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -321,6 +336,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media:media_unittests",
+        "module_scheme": "gtest",
         "name": "media_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -336,6 +352,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/midi:midi_unittests",
+        "module_scheme": "gtest",
         "name": "midi_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -351,6 +368,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//mojo:mojo_unittests",
+        "module_scheme": "gtest",
         "name": "mojo_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -369,6 +387,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/ozone/gl:ozone_gl_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_gl_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -384,6 +403,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//ui/ozone:ozone_unittests",
+        "module_scheme": "gtest",
         "name": "ozone_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -399,6 +419,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//pdf:pdf_unittests",
+        "module_scheme": "gtest",
         "name": "pdf_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -414,6 +435,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//printing:printing_unittests",
+        "module_scheme": "gtest",
         "name": "printing_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -433,6 +455,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//chrome/browser/metrics/perf:profile_provider_unittest",
+        "module_scheme": "gtest",
         "name": "profile_provider_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -448,6 +471,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//testing/rust_gtest_interop:rust_gtest_interop_unittests",
+        "module_scheme": "gtest",
         "name": "rust_gtest_interop_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -463,6 +487,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//sql:sql_unittests",
+        "module_scheme": "gtest",
         "name": "sql_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -478,6 +503,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//url:url_unittests",
+        "module_scheme": "gtest",
         "name": "url_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -497,6 +523,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/gpu/vaapi:vaapi_unittest",
+        "module_scheme": "gtest",
         "name": "vaapi_unittest RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -524,6 +551,7 @@
         "cros_model": "kano",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_av1 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -550,6 +578,7 @@
         "cros_model": "kano",
         "experiment_percentage": 100,
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_vp8 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -575,6 +604,7 @@
         "cros_board": "brya",
         "cros_model": "kano",
         "module_name": "//media/gpu/test:video_decode_accelerator_tests",
+        "module_scheme": "gtest",
         "name": "video_decode_accelerator_tests_fake_vaapi_vp9 RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -601,6 +631,7 @@
         "autotest_name": "chromium",
         "cros_board": "jacuzzi",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -627,6 +658,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -657,6 +689,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -676,6 +709,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -690,6 +724,7 @@
         "autotest_name": "chromium",
         "cros_board": "jacuzzi",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -713,6 +748,7 @@
         "autotest_name": "chromium",
         "cros_board": "trogdor",
         "module_name": "//base:base_unittests",
+        "module_scheme": "gtest",
         "name": "base_unittests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
@@ -739,6 +775,7 @@
           "dep:no_chrome_dcheck"
         ],
         "module_name": "//chromeos:chrome_all_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_all_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -769,6 +806,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_criticalstaging_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_criticalstaging_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -788,6 +826,7 @@
         ],
         "experiment_percentage": 100,
         "module_name": "//chromeos:chrome_disabled_tast_tests",
+        "module_scheme": "tast",
         "name": "chrome_disabled_tast_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "tast"
@@ -802,6 +841,7 @@
         "autotest_name": "chromium",
         "cros_board": "trogdor",
         "module_name": "//chrome/test:chromeos_integration_tests",
+        "module_scheme": "gtest",
         "name": "chromeos_integration_tests RELEASE_LKGM",
         "resultdb": {
           "result_format": "gtest"
diff --git a/testing/buildbot/internal.optimization_guide.json b/testing/buildbot/internal.optimization_guide.json
index 26255489..de7a4dd6 100644
--- a/testing/buildbot/internal.optimization_guide.json
+++ b/testing/buildbot/internal.optimization_guide.json
@@ -17,6 +17,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//components/optimization_guide/internal/testing:chrome_ai_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_ai_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -52,6 +53,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//components/optimization_guide/internal/testing:chrome_ai_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_ai_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -1050,6 +1052,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:browser_tests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_browser_tests",
         "swarming": {
           "dimensions": {
@@ -1079,6 +1082,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests iPhone 13",
         "swarming": {
           "cipd_packages": [
@@ -1119,6 +1123,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_unittests iPhone 13",
         "swarming": {
           "cipd_packages": [
@@ -1168,6 +1173,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests iPhone 14 18.2",
         "swarming": {
           "cipd_packages": [
@@ -1214,6 +1220,7 @@
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_unittests iPhone 14 18.2",
         "swarming": {
           "cipd_packages": [
@@ -1259,6 +1266,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:chrome_ml_unittests",
+        "module_scheme": "gtest",
         "name": "chrome_ml_unittests",
         "swarming": {
           "dimensions": {
@@ -1281,6 +1289,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests NVIDIA GeForce GTX 1660",
         "swarming": {
           "dimensions": {
@@ -1306,6 +1315,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests NVIDIA GeForce GTX 1660",
         "swarming": {
           "dimensions": {
@@ -1328,6 +1338,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_unittests",
         "swarming": {
           "dimensions": {
@@ -1571,6 +1582,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:chrome_ml_unittests",
+        "module_scheme": "gtest",
         "name": "chrome_ml_unittests",
         "swarming": {
           "dimensions": {
@@ -1591,6 +1603,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests",
         "swarming": {
           "dimensions": {
@@ -1613,6 +1626,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests",
         "swarming": {
           "dimensions": {
@@ -1630,6 +1644,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_unittests",
         "swarming": {
           "dimensions": {
@@ -1832,6 +1847,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:chrome_ml_unittests",
+        "module_scheme": "gtest",
         "name": "chrome_ml_unittests",
         "swarming": {
           "dimensions": {
@@ -1852,6 +1868,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests",
         "swarming": {
           "dimensions": {
@@ -1874,6 +1891,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests",
         "swarming": {
           "dimensions": {
@@ -1891,6 +1909,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_unittests",
         "swarming": {
           "dimensions": {
@@ -2093,6 +2112,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:chrome_ml_unittests",
+        "module_scheme": "gtest",
         "name": "chrome_ml_unittests",
         "swarming": {
           "dimensions": {
@@ -2115,6 +2135,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests",
         "swarming": {
           "dimensions": {
@@ -2139,6 +2160,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests",
         "swarming": {
           "dimensions": {
@@ -2158,6 +2180,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_unittests",
         "swarming": {
           "dimensions": {
@@ -2294,6 +2317,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:chrome_ml_unittests",
+        "module_scheme": "gtest",
         "name": "chrome_ml_unittests",
         "swarming": {
           "dimensions": {
@@ -2314,6 +2338,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests AMD Radeon RX 5500 XT",
         "swarming": {
           "dimensions": {
@@ -2335,6 +2360,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests Intel UHD 630 or 770",
         "swarming": {
           "dimensions": {
@@ -2356,6 +2382,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests NVIDIA GeForce GTX 1660",
         "swarming": {
           "dimensions": {
@@ -2379,6 +2406,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests AMD Radeon RX 5500 XT",
         "swarming": {
           "dimensions": {
@@ -2402,6 +2430,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests Intel UHD 630 or 770",
         "swarming": {
           "dimensions": {
@@ -2425,6 +2454,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests NVIDIA GeForce GTX 1660",
         "swarming": {
           "dimensions": {
@@ -2443,6 +2473,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_unittests",
         "swarming": {
           "dimensions": {
@@ -2623,6 +2654,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:chrome_ml_unittests",
+        "module_scheme": "gtest",
         "name": "chrome_ml_unittests",
         "swarming": {
           "dimensions": {
@@ -2643,6 +2675,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests AMD Radeon RX 5500 XT",
         "swarming": {
           "dimensions": {
@@ -2664,6 +2697,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests Intel UHD 630 or 770",
         "swarming": {
           "dimensions": {
@@ -2685,6 +2719,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests NVIDIA GeForce GTX 1660",
         "swarming": {
           "dimensions": {
@@ -2708,6 +2743,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests AMD Radeon RX 5500 XT",
         "swarming": {
           "dimensions": {
@@ -2731,6 +2767,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests Intel UHD 630 or 770",
         "swarming": {
           "dimensions": {
@@ -2754,6 +2791,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests NVIDIA GeForce GTX 1660",
         "swarming": {
           "dimensions": {
@@ -2772,6 +2810,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_unittests",
         "swarming": {
           "dimensions": {
@@ -3077,6 +3116,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests",
         "swarming": {
           "dimensions": {
@@ -3100,6 +3140,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests",
         "swarming": {
           "dimensions": {
@@ -3130,6 +3171,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_wpt_tests",
+        "module_scheme": "webtest",
         "name": "blink_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -3159,6 +3201,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//components/optimization_guide/internal:optimization_guide_gpu_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_gpu_unittests",
         "swarming": {
           "dimensions": {
@@ -3181,6 +3224,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//services:services_unittests",
+        "module_scheme": "gtest",
         "name": "optimization_guide_services_unittests",
         "swarming": {
           "dimensions": {
diff --git a/testing/buildbot/internal.translatekit.json b/testing/buildbot/internal.translatekit.json
index a9f013e..088adf9 100644
--- a/testing/buildbot/internal.translatekit.json
+++ b/testing/buildbot/internal.translatekit.json
@@ -17,6 +17,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -52,6 +53,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -87,6 +89,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -122,6 +125,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -156,6 +160,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/tryserver.devtools-frontend.json b/testing/buildbot/tryserver.devtools-frontend.json
index d59c71e..89531ef3 100644
--- a/testing/buildbot/tryserver.devtools-frontend.json
+++ b/testing/buildbot/tryserver.devtools-frontend.json
@@ -11,6 +11,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:browser_tests",
+        "module_scheme": "gtest",
         "name": "devtools_browser_tests",
         "swarming": {
           "dimensions": {
@@ -36,6 +37,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -64,6 +66,7 @@
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
         "module_name": "//chrome/test:browser_tests",
+        "module_scheme": "gtest",
         "name": "devtools_browser_tests",
         "swarming": {
           "dimensions": {
@@ -89,6 +92,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -121,6 +125,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/tryserver.v8.json b/testing/buildbot/tryserver.v8.json
index 2f95441b..0461368f 100644
--- a/testing/buildbot/tryserver.v8.json
+++ b/testing/buildbot/tryserver.v8.json
@@ -15,6 +15,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -43,6 +44,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_wpt_tests",
+        "module_scheme": "webtest",
         "name": "blink_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -70,6 +72,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "chrome_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -102,6 +105,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:headless_shell_wpt",
+        "module_scheme": "webtest",
         "name": "headless_shell_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -132,6 +136,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "high_dpi_blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -161,6 +166,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_wpt_tests",
+        "module_scheme": "webtest",
         "name": "high_dpi_blink_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -191,6 +197,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:headless_shell_wpt",
+        "module_scheme": "webtest",
         "name": "high_dpi_headless_shell_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -220,6 +227,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "not_site_per_process_blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -249,6 +257,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_wpt_tests",
+        "module_scheme": "webtest",
         "name": "not_site_per_process_blink_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -279,6 +288,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:headless_shell_wpt",
+        "module_scheme": "webtest",
         "name": "not_site_per_process_headless_shell_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -309,6 +319,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_web_tests",
+        "module_scheme": "webtest",
         "name": "vulkan_swiftshader_blink_web_tests",
         "resultdb": {
           "enable": true,
@@ -335,6 +346,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:chrome_wpt_tests",
+        "module_scheme": "webtest",
         "name": "webdriver_wpt_tests",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/tryserver.webrtc.json b/testing/buildbot/tryserver.webrtc.json
index cac15821..48a3394 100644
--- a/testing/buildbot/tryserver.webrtc.json
+++ b/testing/buildbot/tryserver.webrtc.json
@@ -70,6 +70,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:blink_wpt_tests",
+        "module_scheme": "webtest",
         "name": "blink_wpt_tests",
         "resultdb": {
           "enable": true,
@@ -110,6 +111,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "module_name": "//:headless_shell_wpt",
+        "module_scheme": "webtest",
         "name": "headless_shell_wpt_tests",
         "resultdb": {
           "enable": true,
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index e1a36e0..8da1b3a 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -131,25 +131,6 @@
             ]
         }
     ],
-    "AbslFlatMapInVariantMap": [
-        {
-            "platforms": [
-                "android",
-                "chromeos",
-                "linux",
-                "windows",
-                "mac"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "AbslFlatMapInVariantMap"
-                    ]
-                }
-            ]
-        }
-    ],
     "AccessibilityCheckJavaNodeCacheFreshness": [
         {
             "platforms": [
@@ -14047,6 +14028,21 @@
             ]
         }
     ],
+    "IOSTabGridDragAndDrop": [
+        {
+            "platforms": [
+                "ios"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "TabGridDragAndDrop"
+                    ]
+                }
+            ]
+        }
+    ],
     "IOSTabResumptionShopCard": [
         {
             "platforms": [
@@ -15751,199 +15747,6 @@
             ]
         }
     ],
-    "MemoryCacheCombined": [
-        {
-            "platforms": [
-                "chromeos",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "IP_Enabled",
-                    "enable_features": [
-                        "MemoryCacheIntelligentPruning",
-                        "MemoryCacheStrongReference",
-                        "ReleaseResourceDecodedDataOnMemoryPressure",
-                        "ReleaseResourceStrongReferencesOnMemoryPressure"
-                    ],
-                    "disable_features": [
-                        "MemoryCacheChangeStrongReferencePruneDelay",
-                        "MemoryCacheStrongReferenceExtensions"
-                    ]
-                },
-                {
-                    "name": "IP_Enabled_NoPressureRelease",
-                    "enable_features": [
-                        "MemoryCacheIntelligentPruning",
-                        "MemoryCacheStrongReference"
-                    ],
-                    "disable_features": [
-                        "MemoryCacheChangeStrongReferencePruneDelay",
-                        "MemoryCacheStrongReferenceExtensions",
-                        "ReleaseResourceDecodedDataOnMemoryPressure",
-                        "ReleaseResourceStrongReferencesOnMemoryPressure"
-                    ]
-                },
-                {
-                    "name": "MaxLimits1HourDelay",
-                    "params": {
-                        "memory_cache_strong_ref_resource_size_threshold": "104857600",
-                        "memory_cache_strong_ref_total_size_threshold": "209715200",
-                        "strong_reference_prune_delay": "60m"
-                    },
-                    "enable_features": [
-                        "MemoryCacheChangeStrongReferencePruneDelay",
-                        "MemoryCacheStrongReference"
-                    ],
-                    "disable_features": [
-                        "MemoryCacheIntelligentPruning",
-                        "MemoryCacheStrongReferenceExtensions",
-                        "ReleaseResourceDecodedDataOnMemoryPressure",
-                        "ReleaseResourceStrongReferencesOnMemoryPressure"
-                    ]
-                },
-                {
-                    "name": "MaxLimits1HourDelay_HM",
-                    "params": {
-                        "image": "true",
-                        "manifest": "true",
-                        "memory_cache_strong_ref_resource_size_threshold": "104857600",
-                        "memory_cache_strong_ref_total_size_threshold": "209715200",
-                        "raw": "true",
-                        "strong_reference_prune_delay": "60m",
-                        "svg_document": "true",
-                        "xsl_stylesheet": "true"
-                    },
-                    "enable_features": [
-                        "MemoryCacheChangeStrongReferencePruneDelay",
-                        "MemoryCacheStrongReference",
-                        "MemoryCacheStrongReferenceExtensions"
-                    ],
-                    "disable_features": [
-                        "MemoryCacheIntelligentPruning",
-                        "ReleaseResourceDecodedDataOnMemoryPressure",
-                        "ReleaseResourceStrongReferencesOnMemoryPressure"
-                    ]
-                },
-                {
-                    "name": "Combination_HM_MaxLimits",
-                    "params": {
-                        "image": "true",
-                        "manifest": "true",
-                        "memory_cache_strong_ref_resource_size_threshold": "104857600",
-                        "memory_cache_strong_ref_total_size_threshold": "209715200",
-                        "raw": "true",
-                        "strong_reference_prune_delay": "60m",
-                        "svg_document": "true",
-                        "xsl_stylesheet": "true"
-                    },
-                    "enable_features": [
-                        "MemoryCacheChangeStrongReferencePruneDelay",
-                        "MemoryCacheIntelligentPruning",
-                        "MemoryCacheStrongReference",
-                        "MemoryCacheStrongReferenceExtensions"
-                    ],
-                    "disable_features": [
-                        "ReleaseResourceDecodedDataOnMemoryPressure",
-                        "ReleaseResourceStrongReferencesOnMemoryPressure"
-                    ]
-                },
-                {
-                    "name": "Combination_Image_MaxLimits",
-                    "params": {
-                        "image": "true",
-                        "memory_cache_strong_ref_resource_size_threshold": "104857600",
-                        "memory_cache_strong_ref_total_size_threshold": "209715200",
-                        "strong_reference_prune_delay": "60m"
-                    },
-                    "enable_features": [
-                        "MemoryCacheChangeStrongReferencePruneDelay",
-                        "MemoryCacheIntelligentPruning",
-                        "MemoryCacheStrongReference",
-                        "MemoryCacheStrongReferenceExtensions"
-                    ],
-                    "disable_features": [
-                        "ReleaseResourceDecodedDataOnMemoryPressure",
-                        "ReleaseResourceStrongReferencesOnMemoryPressure"
-                    ]
-                },
-                {
-                    "name": "Combination_HM_MaxLimits_Balanced",
-                    "params": {
-                        "cost_weight": "0.0005",
-                        "freq_weight": "75.0",
-                        "image": "true",
-                        "manifest": "true",
-                        "memory_cache_strong_ref_resource_size_threshold": "104857600",
-                        "memory_cache_strong_ref_total_size_threshold": "209715200",
-                        "raw": "true",
-                        "strong_reference_prune_delay": "60m",
-                        "svg_document": "true",
-                        "type_weight": "75.0",
-                        "xsl_stylesheet": "true"
-                    },
-                    "enable_features": [
-                        "MemoryCacheChangeStrongReferencePruneDelay",
-                        "MemoryCacheIntelligentPruning",
-                        "MemoryCacheStrongReference",
-                        "MemoryCacheStrongReferenceExtensions"
-                    ],
-                    "disable_features": [
-                        "ReleaseResourceDecodedDataOnMemoryPressure",
-                        "ReleaseResourceStrongReferencesOnMemoryPressure"
-                    ]
-                },
-                {
-                    "name": "Combination_HM_MaxLimits_SizeAware",
-                    "params": {
-                        "cost_weight": "0.005",
-                        "freq_weight": "60.0",
-                        "image": "true",
-                        "manifest": "true",
-                        "memory_cache_strong_ref_resource_size_threshold": "104857600",
-                        "memory_cache_strong_ref_total_size_threshold": "209715200",
-                        "raw": "true",
-                        "strong_reference_prune_delay": "60m",
-                        "svg_document": "true",
-                        "type_weight": "80.0",
-                        "xsl_stylesheet": "true"
-                    },
-                    "enable_features": [
-                        "MemoryCacheChangeStrongReferencePruneDelay",
-                        "MemoryCacheIntelligentPruning",
-                        "MemoryCacheStrongReference",
-                        "MemoryCacheStrongReferenceExtensions"
-                    ],
-                    "disable_features": [
-                        "ReleaseResourceDecodedDataOnMemoryPressure",
-                        "ReleaseResourceStrongReferencesOnMemoryPressure"
-                    ]
-                },
-                {
-                    "name": "IntelligentPruning_HM_DefaultLimits",
-                    "params": {
-                        "image": "true",
-                        "manifest": "true",
-                        "raw": "true",
-                        "svg_document": "true",
-                        "xsl_stylesheet": "true"
-                    },
-                    "enable_features": [
-                        "MemoryCacheIntelligentPruning",
-                        "MemoryCacheStrongReference",
-                        "MemoryCacheStrongReferenceExtensions"
-                    ],
-                    "disable_features": [
-                        "MemoryCacheChangeStrongReferencePruneDelay",
-                        "ReleaseResourceDecodedDataOnMemoryPressure",
-                        "ReleaseResourceStrongReferencesOnMemoryPressure"
-                    ]
-                }
-            ]
-        }
-    ],
     "MemoryConsumerForNGShapeCache": [
         {
             "platforms": [
@@ -18484,19 +18287,57 @@
         {
             "platforms": [
                 "android",
-                "android_webview",
-                "chromeos",
-                "ios",
-                "linux",
-                "mac"
+                "android_webview"
             ],
             "experiments": [
                 {
-                    "name": "EnabledConservative",
+                    "name": "EnabledConservative_20251114",
                     "params": {
                         "MacCriticalDiskSpacePressureThresholdMB": "250"
                     },
                     "enable_features": [
+                        "AbslFlatMapInVariantMap",
+                        "AsyncSetCookie",
+                        "AvoidCloneArgsOnExtensionFunctionDispatch",
+                        "AvoidUnnecessaryGetMinimizeButtonOffset",
+                        "AvoidUnnecessaryShouldRenderRichAnimation",
+                        "CompressParkableStrings",
+                        "FastPathNoRaster",
+                        "GCOnArrayBufferAllocationFailure",
+                        "MacAllowBackgroundingRenderProcesses",
+                        "MacCriticalDiskSpacePressure",
+                        "MvcUpdateViewWhenModelChanged",
+                        "NoPreReadMainDllIfSsd",
+                        "PageAllocatorRetryOnCommitFailure",
+                        "ReducePPMs",
+                        "ReloadTabUiResourcesIfChanged",
+                        "RemoveCancelledScriptedIdleTasks",
+                        "ScreenWinDisplayLookupByHMONITOR",
+                        "SlimDirectReceiverIpc",
+                        "TerminationTargetPolicy",
+                        "UpdateDirectManipulationHelperOnParentChange"
+                    ],
+                    "disable_features": [
+                        "MemoryCacheStrongReference",
+                        "SuppressMemoryListeners",
+                        "SuppressMemoryMonitor"
+                    ]
+                }
+            ]
+        },
+        {
+            "platforms": [
+                "chromeos",
+                "linux"
+            ],
+            "experiments": [
+                {
+                    "name": "EnabledConservative_20251114",
+                    "params": {
+                        "MacCriticalDiskSpacePressureThresholdMB": "250"
+                    },
+                    "enable_features": [
+                        "AbslFlatMapInVariantMap",
                         "AsyncSetCookie",
                         "AvoidCloneArgsOnExtensionFunctionDispatch",
                         "AvoidUnnecessaryGetMinimizeButtonOffset",
@@ -18522,15 +18363,63 @@
         },
         {
             "platforms": [
+                "mac"
+            ],
+            "experiments": [
+                {
+                    "name": "EnabledConservative_20251114",
+                    "params": {
+                        "MacCriticalDiskSpacePressureThresholdMB": "250",
+                        "suppress_memory_listeners_mask": "0000200200220200020020000002020000000000000000020",
+                        "suppress_memory_monitor_mask": "00020000020000"
+                    },
+                    "enable_features": [
+                        "AbslFlatMapInVariantMap",
+                        "AsyncSetCookie",
+                        "AvoidCloneArgsOnExtensionFunctionDispatch",
+                        "AvoidUnnecessaryGetMinimizeButtonOffset",
+                        "AvoidUnnecessaryShouldRenderRichAnimation",
+                        "CompressParkableStrings",
+                        "FastPathNoRaster",
+                        "GCOnArrayBufferAllocationFailure",
+                        "MacAllowBackgroundingRenderProcesses",
+                        "MacCriticalDiskSpacePressure",
+                        "MemoryCacheStrongReference",
+                        "MvcUpdateViewWhenModelChanged",
+                        "NoPreReadMainDllIfSsd",
+                        "PageAllocatorRetryOnCommitFailure",
+                        "ReducePPMs",
+                        "ReleaseResourceDecodedDataOnMemoryPressure",
+                        "ReleaseResourceStrongReferencesOnMemoryPressure",
+                        "ReloadTabUiResourcesIfChanged",
+                        "RemoveCancelledScriptedIdleTasks",
+                        "ScreenWinDisplayLookupByHMONITOR",
+                        "SlimDirectReceiverIpc",
+                        "SuppressMemoryListeners",
+                        "SuppressMemoryMonitor",
+                        "TerminationTargetPolicy",
+                        "UpdateDirectManipulationHelperOnParentChange"
+                    ],
+                    "disable_features": [
+                        "MemoryCacheChangeStrongReferencePruneDelay"
+                    ]
+                }
+            ]
+        },
+        {
+            "platforms": [
                 "windows"
             ],
             "experiments": [
                 {
-                    "name": "EnabledConservative",
+                    "name": "EnabledConservative_20251114",
                     "params": {
-                        "MacCriticalDiskSpacePressureThresholdMB": "250"
+                        "MacCriticalDiskSpacePressureThresholdMB": "250",
+                        "suppress_memory_listeners_mask": "0000200200220200020020000002020000000000000000020",
+                        "suppress_memory_monitor_mask": "00020000020000"
                     },
                     "enable_features": [
+                        "AbslFlatMapInVariantMap",
                         "AsyncSetCookie",
                         "AvoidCloneArgsOnExtensionFunctionDispatch",
                         "AvoidUnnecessaryGetMinimizeButtonOffset",
@@ -18541,16 +18430,24 @@
                         "GCOnArrayBufferAllocationFailure",
                         "MacAllowBackgroundingRenderProcesses",
                         "MacCriticalDiskSpacePressure",
+                        "MemoryCacheStrongReference",
                         "MvcUpdateViewWhenModelChanged",
                         "NoPreReadMainDllIfSsd",
                         "PageAllocatorRetryOnCommitFailure",
                         "ReducePPMs",
+                        "ReleaseResourceDecodedDataOnMemoryPressure",
+                        "ReleaseResourceStrongReferencesOnMemoryPressure",
                         "ReloadTabUiResourcesIfChanged",
                         "RemoveCancelledScriptedIdleTasks",
                         "ScreenWinDisplayLookupByHMONITOR",
                         "SlimDirectReceiverIpc",
+                        "SuppressMemoryListeners",
+                        "SuppressMemoryMonitor",
                         "TerminationTargetPolicy",
                         "UpdateDirectManipulationHelperOnParentChange"
+                    ],
+                    "disable_features": [
+                        "MemoryCacheChangeStrongReferencePruneDelay"
                     ]
                 }
             ]
@@ -24967,30 +24864,6 @@
             ]
         }
     ],
-    "SuppressMemoryListeners": [
-        {
-            "platforms": [
-                "android",
-                "chromeos",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "params": {
-                        "suppress_memory_listeners_mask": "0000200200220200020020000002020000000000000000020",
-                        "suppress_memory_monitor_mask": "00020000020000"
-                    },
-                    "enable_features": [
-                        "SuppressMemoryListeners",
-                        "SuppressMemoryMonitor"
-                    ]
-                }
-            ]
-        }
-    ],
     "SuppressesNetworkActivitiesOnSlowNetwork": [
         {
             "platforms": [
@@ -26272,6 +26145,21 @@
             ]
         }
     ],
+    "UseCursorEventHook": [
+        {
+            "platforms": [
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "UseCursorEventHook"
+                    ]
+                }
+            ]
+        }
+    ],
     "UseDHCPCD10": [
         {
             "platforms": [
@@ -28949,6 +28837,24 @@
             ]
         }
     ],
+    "YourSavedInfoSettingsPage": [
+        {
+            "platforms": [
+                "windows",
+                "mac",
+                "linux",
+                "chromeos"
+            ],
+            "experiments": [
+                {
+                    "name": "Enable",
+                    "enable_features": [
+                        "YourSavedInfoSettingsPage"
+                    ]
+                }
+            ]
+        }
+    ],
     "ZPSPrefetchDebouncingDesktop": [
         {
             "platforms": [
diff --git a/third_party/abseil-cpp/CMake/AbseilDll.cmake b/third_party/abseil-cpp/CMake/AbseilDll.cmake
index b6a04f8..f2cc514 100644
--- a/third_party/abseil-cpp/CMake/AbseilDll.cmake
+++ b/third_party/abseil-cpp/CMake/AbseilDll.cmake
@@ -127,6 +127,8 @@
   "debugging/internal/address_is_readable.h"
   "debugging/internal/addresses.h"
   "debugging/internal/bounded_utf8_length_sequence.h"
+  "debugging/internal/borrowed_fixup_buffer.h"
+  "debugging/internal/borrowed_fixup_buffer.cc"
   "debugging/internal/decode_rust_punycode.cc"
   "debugging/internal/decode_rust_punycode.h"
   "debugging/internal/demangle.cc"
diff --git a/third_party/abseil-cpp/README.chromium b/third_party/abseil-cpp/README.chromium
index ca95a2d8..8165cea 100644
--- a/third_party/abseil-cpp/README.chromium
+++ b/third_party/abseil-cpp/README.chromium
@@ -4,7 +4,7 @@
 License: Apache-2.0
 License File: LICENSE
 Version: N/A
-Revision: 9abb0b5196cc8c63d1cbbcfda561b5ff37c77496
+Revision: 48bf10f1429628cc2bf8d7cd122a003f322a5a04
 Update Mechanism: Manual
 Security Critical: yes
 Shipped: yes
diff --git a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc
index 1b8204b2..4adf591 100644
--- a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc
+++ b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc
@@ -81,6 +81,7 @@
   capacity.store(0, std::memory_order_relaxed);
   size.store(0, std::memory_order_relaxed);
   num_erases.store(0, std::memory_order_relaxed);
+  num_insert_hits.store(0, std::memory_order_relaxed);
   num_rehashes.store(0, std::memory_order_relaxed);
   max_probe_length.store(0, std::memory_order_relaxed);
   total_probe_length.store(0, std::memory_order_relaxed);
diff --git a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h
index 5c59a9e..163b18a 100644
--- a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h
+++ b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h
@@ -82,6 +82,7 @@
   std::atomic<size_t> capacity;
   std::atomic<size_t> size;
   std::atomic<size_t> num_erases;
+  std::atomic<size_t> num_insert_hits;
   std::atomic<size_t> num_rehashes;
   std::atomic<size_t> max_probe_length;
   std::atomic<size_t> total_probe_length;
@@ -111,6 +112,16 @@
 
 void RecordRehashSlow(HashtablezInfo* info, size_t total_probe_length);
 
+// This is inline to avoid calling convention overhead for an otherwise
+// lightweight operation.
+inline void RecordInsertHitSlow(HashtablezInfo* info) {
+  // We avoid fetch_add since no other thread should be mutating the table
+  // simultaneously without synchronization.
+  info->num_insert_hits.store(
+      info->num_insert_hits.load(std::memory_order_relaxed) + 1,
+      std::memory_order_relaxed);
+}
+
 void RecordReservationSlow(HashtablezInfo* info, size_t target_capacity);
 
 void RecordClearedReservationSlow(HashtablezInfo* info);
@@ -184,6 +195,11 @@
     RecordEraseSlow(info_);
   }
 
+  inline void RecordInsertHit() {
+    if (ABSL_PREDICT_TRUE(info_ == nullptr)) return;
+    RecordInsertHitSlow(info_);
+  }
+
   friend inline void swap(HashtablezInfoHandle& lhs,
                           HashtablezInfoHandle& rhs) {
     std::swap(lhs.info_, rhs.info_);
@@ -210,6 +226,7 @@
   inline void RecordInsertMiss(size_t /*hash*/,
                                size_t /*distance_from_desired*/) {}
   inline void RecordErase() {}
+  inline void RecordInsertHit() {}
 
   friend inline void swap(HashtablezInfoHandle& /*lhs*/,
                           HashtablezInfoHandle& /*rhs*/) {}
diff --git a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc
index 80fe3cf..cbd8edca 100644
--- a/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc
+++ b/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc
@@ -99,6 +99,7 @@
   EXPECT_EQ(info.capacity.load(), 0);
   EXPECT_EQ(info.size.load(), 0);
   EXPECT_EQ(info.num_erases.load(), 0);
+  EXPECT_EQ(info.num_insert_hits.load(), 0);
   EXPECT_EQ(info.num_rehashes.load(), 0);
   EXPECT_EQ(info.max_probe_length.load(), 0);
   EXPECT_EQ(info.total_probe_length.load(), 0);
@@ -116,6 +117,7 @@
   info.capacity.store(1, std::memory_order_relaxed);
   info.size.store(1, std::memory_order_relaxed);
   info.num_erases.store(1, std::memory_order_relaxed);
+  info.num_insert_hits.store(1, std::memory_order_relaxed);
   info.max_probe_length.store(1, std::memory_order_relaxed);
   info.total_probe_length.store(1, std::memory_order_relaxed);
   info.hashes_bitwise_or.store(1, std::memory_order_relaxed);
@@ -131,6 +133,7 @@
   EXPECT_EQ(info.capacity.load(), 0);
   EXPECT_EQ(info.size.load(), 0);
   EXPECT_EQ(info.num_erases.load(), 0);
+  EXPECT_EQ(info.num_insert_hits.load(), 0);
   EXPECT_EQ(info.num_rehashes.load(), 0);
   EXPECT_EQ(info.max_probe_length.load(), 0);
   EXPECT_EQ(info.total_probe_length.load(), 0);
@@ -221,6 +224,25 @@
   EXPECT_EQ(info.soo_capacity, 1);
 }
 
+TEST(HashtablezInfoTest, RecordInsertHit) {
+  const int64_t test_stride = 31;
+  const size_t test_element_size = 29;
+  const size_t test_key_size = 27;
+  const size_t test_value_size = 25;
+
+  HashtablezInfo info;
+  absl::MutexLock l(info.init_mu);
+  info.PrepareForSampling(test_stride, test_element_size,
+                          /*key_size=*/test_key_size,
+                          /*value_size=*/test_value_size,
+                          /*soo_capacity_value=*/1);
+  EXPECT_EQ(info.num_insert_hits.load(), 0);
+  RecordInsertHitSlow(&info);
+  EXPECT_EQ(info.num_insert_hits.load(), 1);
+  RecordInsertHitSlow(&info);
+  EXPECT_EQ(info.num_insert_hits.load(), 2);
+}
+
 TEST(HashtablezInfoTest, RecordRehash) {
   const int64_t test_stride = 33;
   const size_t test_element_size = 31;
diff --git a/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
index faa7880..31b117e 100644
--- a/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
+++ b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
@@ -3173,6 +3173,7 @@
     }
     if (!empty()) {
       if (equal_to(key, single_slot())) {
+        common().infoz().RecordInsertHit();
         return {single_iterator(), false};
       }
     }
@@ -3204,6 +3205,7 @@
           if (ABSL_PREDICT_TRUE(equal_to(key, slot_array() + seq.offset(i)))) {
             index = seq.offset(i);
             inserted = false;
+            common().infoz().RecordInsertHit();
             return;
           }
         }
diff --git a/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc b/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc
index 499e966..8c804631 100644
--- a/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc
+++ b/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc
@@ -2790,6 +2790,7 @@
   absl::flat_hash_set<const HashtablezInfo*> preexisting_info(10);
   absl::flat_hash_map<size_t, int> observed_checksums(10);
   absl::flat_hash_map<ssize_t, int> reservations(10);
+  absl::flat_hash_map<std::pair<size_t, size_t>, int> hit_misses(10);
 
   start_size += sampler.Iterate([&](const HashtablezInfo& info) {
     preexisting_info.insert(&info);
@@ -2802,6 +2803,8 @@
 
     const bool do_reserve = (i % 10 > 5);
     const bool do_rehash = !do_reserve && (i % 10 > 0);
+    const bool do_first_insert_hit = i % 2 == 0;
+    const bool do_second_insert_hit = i % 4 == 0;
 
     if (do_reserve) {
       // Don't reserve on all tables.
@@ -2809,7 +2812,14 @@
     }
 
     tables.back().insert(1);
+    if (do_first_insert_hit) {
+      tables.back().insert(1);
+      tables.back().insert(1);
+    }
     tables.back().insert(i % 5);
+    if (do_second_insert_hit) {
+      tables.back().insert(i % 5);
+    }
 
     if (do_rehash) {
       // Rehash some other tables.
@@ -2823,6 +2833,10 @@
     observed_checksums[info.hashes_bitwise_xor.load(
         std::memory_order_relaxed)]++;
     reservations[info.max_reserve.load(std::memory_order_relaxed)]++;
+    hit_misses[std::make_pair(
+        info.num_insert_hits.load(std::memory_order_relaxed),
+        info.size.load(std::memory_order_relaxed))]++;
+
     EXPECT_EQ(info.inline_element_size, sizeof(typename TypeParam::value_type));
     EXPECT_EQ(info.key_size, sizeof(typename TypeParam::key_type));
     EXPECT_EQ(info.value_size, sizeof(typename TypeParam::value_type));
@@ -2850,6 +2864,21 @@
     EXPECT_NEAR((100 * count) / static_cast<double>(tables.size()), 0.1, 0.05)
         << reservation;
   }
+
+  EXPECT_THAT(hit_misses, testing::SizeIs(6));
+  const double sampled_tables = end_size - start_size;
+  // i % 20: { 1, 11 }
+  EXPECT_NEAR((hit_misses[{1, 1}] / sampled_tables), 0.10, 0.02);
+  // i % 20: { 6 }
+  EXPECT_NEAR((hit_misses[{3, 1}] / sampled_tables), 0.05, 0.02);
+  // i % 20: { 0, 4, 8, 12 }
+  EXPECT_NEAR((hit_misses[{3, 2}] / sampled_tables), 0.20, 0.02);
+  // i % 20: { 2, 10, 14, 18 }
+  EXPECT_NEAR((hit_misses[{2, 2}] / sampled_tables), 0.20, 0.02);
+  // i % 20: { 16 }
+  EXPECT_NEAR((hit_misses[{4, 1}] / sampled_tables), 0.05, 0.02);
+  // i % 20: { 3, 5, 7, 9, 13, 15, 17, 19 }
+  EXPECT_NEAR((hit_misses[{0, 2}] / sampled_tables), 0.40, 0.02);
 }
 
 std::vector<const HashtablezInfo*> SampleSooMutation(
diff --git a/third_party/abseil-cpp/absl/debugging/BUILD.bazel b/third_party/abseil-cpp/absl/debugging/BUILD.bazel
index 7cc053e7..aad5e28 100644
--- a/third_party/abseil-cpp/absl/debugging/BUILD.bazel
+++ b/third_party/abseil-cpp/absl/debugging/BUILD.bazel
@@ -36,6 +36,33 @@
 licenses(["notice"])
 
 cc_library(
+    name = "borrowed_fixup_buffer",
+    srcs = ["internal/borrowed_fixup_buffer.cc"],
+    hdrs = ["internal/borrowed_fixup_buffer.h"],
+    copts = ABSL_DEFAULT_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
+    deps = [
+        "//absl/base:config",
+        "//absl/base:core_headers",
+        "//absl/base:malloc_internal",
+        "//absl/hash",
+    ],
+)
+
+cc_test(
+    name = "borrowed_fixup_buffer_test",
+    srcs = ["internal/borrowed_fixup_buffer_test.cc"],
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
+    deps = [
+        ":borrowed_fixup_buffer",
+        "//absl/base:config",
+        "@googletest//:gtest",
+        "@googletest//:gtest_main",
+    ],
+)
+
+cc_library(
     name = "stacktrace",
     srcs = [
         "internal/stacktrace_aarch64-inl.inc",
@@ -54,6 +81,7 @@
     copts = ABSL_DEFAULT_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
+        ":borrowed_fixup_buffer",
         ":debugging_internal",
         "//absl/base:config",
         "//absl/base:core_headers",
@@ -69,6 +97,7 @@
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
+        ":borrowed_fixup_buffer",
         ":stacktrace",
         "//absl/base:config",
         "//absl/base:core_headers",
@@ -448,6 +477,7 @@
         ":stacktrace",
         "//absl/base:config",
         "//absl/base:core_headers",
+        "//absl/cleanup",
         "@google_benchmark//:benchmark_main",
     ],
 )
diff --git a/third_party/abseil-cpp/absl/debugging/BUILD.gn b/third_party/abseil-cpp/absl/debugging/BUILD.gn
index adfdddf..4a2f5af 100644
--- a/third_party/abseil-cpp/absl/debugging/BUILD.gn
+++ b/third_party/abseil-cpp/absl/debugging/BUILD.gn
@@ -5,6 +5,25 @@
 import("//build/config/sanitizers/sanitizers.gni")
 import("//third_party/abseil-cpp/absl.gni")
 
+absl_source_set("borrowed_fixup_buffer") {
+  sources = [ "internal/borrowed_fixup_buffer.cc" ]
+  public = [ "internal/borrowed_fixup_buffer.h" ]
+  deps = [
+    "//third_party/abseil-cpp/absl/base:config",
+    "//third_party/abseil-cpp/absl/base:core_headers",
+    "//third_party/abseil-cpp/absl/base:malloc_internal",
+    "//third_party/abseil-cpp/absl/hash",
+  ]
+}
+
+absl_test("borrowed_fixup_buffer_test") {
+  sources = [ "internal/borrowed_fixup_buffer_test.cc" ]
+  deps = [
+    ":borrowed_fixup_buffer",
+    "//third_party/abseil-cpp/absl/base:config",
+  ]
+}
+
 absl_source_set("stacktrace") {
   sources = [
     "internal/stacktrace_aarch64-inl.inc",
@@ -21,6 +40,7 @@
   ]
   public = [ "stacktrace.h" ]
   deps = [
+    ":borrowed_fixup_buffer",
     ":debugging_internal",
     "//third_party/abseil-cpp/absl/base:config",
     "//third_party/abseil-cpp/absl/base:core_headers",
@@ -33,6 +53,7 @@
 absl_test("stacktrace_test") {
   sources = [ "stacktrace_test.cc" ]
   deps = [
+    ":borrowed_fixup_buffer",
     ":stacktrace",
     "//third_party/abseil-cpp/absl/base:config",
     "//third_party/abseil-cpp/absl/base:core_headers",
diff --git a/third_party/abseil-cpp/absl/debugging/CMakeLists.txt b/third_party/abseil-cpp/absl/debugging/CMakeLists.txt
index d8249fe..ab3a795 100644
--- a/third_party/abseil-cpp/absl/debugging/CMakeLists.txt
+++ b/third_party/abseil-cpp/absl/debugging/CMakeLists.txt
@@ -18,6 +18,38 @@
 
 absl_cc_library(
   NAME
+    borrowed_fixup_buffer
+  SRCS
+    "internal/borrowed_fixup_buffer.cc"
+  HDRS
+    "internal/borrowed_fixup_buffer.h"
+  COPTS
+    ${ABSL_DEFAULT_COPTS}
+  LINKOPTS
+    ${ABSL_DEFAULT_LINKOPTS}
+  DEPS
+    absl::config
+    absl::core_headers
+    absl::hash
+    absl::malloc_internal
+  PUBLIC
+)
+
+absl_cc_test(
+  NAME
+    borrowed_fixup_buffer_test
+  SRCS
+    "internal/borrowed_fixup_buffer_test.cc"
+  COPTS
+    ${ABSL_TEST_COPTS}
+  DEPS
+    absl::borrowed_fixup_buffer
+    absl::config
+    GTest::gmock_main
+)
+
+absl_cc_library(
+  NAME
     stacktrace
   HDRS
     "stacktrace.h"
@@ -38,6 +70,7 @@
   LINKOPTS
     $<$<BOOL:${EXECINFO_LIBRARY}>:${EXECINFO_LIBRARY}>
   DEPS
+    absl::borrowed_fixup_buffer
     absl::debugging_internal
     absl::config
     absl::core_headers
diff --git a/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc
new file mode 100644
index 0000000..dae78a7
--- /dev/null
+++ b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc
@@ -0,0 +1,118 @@
+// Copyright 2025 The Abseil Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "absl/debugging/internal/borrowed_fixup_buffer.h"
+
+#include <assert.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdint.h>
+
+#include <atomic>
+#include <iterator>
+
+#include "absl/base/attributes.h"
+#include "absl/base/config.h"
+#include "absl/base/internal/low_level_alloc.h"
+#include "absl/hash/hash.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace internal_stacktrace {
+
+// A buffer for holding fix-up information for stack traces of common sizes_.
+struct BorrowedFixupBuffer::FixupStackBuffer {
+  static constexpr size_t kMaxStackElements = 128;  // Can be reduced if needed
+  std::atomic_flag in_use{};
+  uintptr_t frames[kMaxStackElements];
+  int sizes[kMaxStackElements];
+
+  ABSL_CONST_INIT static FixupStackBuffer g_instances[kNumStaticBuffers];
+};
+
+ABSL_CONST_INIT BorrowedFixupBuffer::FixupStackBuffer
+    BorrowedFixupBuffer::FixupStackBuffer::g_instances[kNumStaticBuffers] = {};
+
+BorrowedFixupBuffer::~BorrowedFixupBuffer() {
+  if (borrowed_) {
+    Unlock();
+  } else {
+    base_internal::LowLevelAlloc::Free(frames_);
+  }
+}
+
+BorrowedFixupBuffer::BorrowedFixupBuffer(size_t length) {
+  FixupStackBuffer* fixup_buffer =
+      0 < length && length <= FixupStackBuffer::kMaxStackElements ? TryLock()
+                                                                  : nullptr;
+  borrowed_ = fixup_buffer != nullptr;
+  if (borrowed_) {
+    InitViaBorrow(fixup_buffer);
+  } else {
+    InitViaAllocation(length);
+  }
+}
+
+void BorrowedFixupBuffer::InitViaBorrow(FixupStackBuffer* borrowed_buffer) {
+  assert(borrowed_);
+  frames_ = borrowed_buffer->frames;
+  sizes_ = borrowed_buffer->sizes;
+}
+
+void BorrowedFixupBuffer::InitViaAllocation(size_t length) {
+  static_assert(alignof(decltype(*frames_)) >= alignof(decltype(*sizes_)),
+                "contiguous layout assumes decreasing alignment, otherwise "
+                "padding may be needed in the middle");
+  assert(!borrowed_);
+
+  base_internal::InitSigSafeArena();
+  void* buf = base_internal::LowLevelAlloc::AllocWithArena(
+      length * (sizeof(*frames_) + sizeof(*sizes_)),
+      base_internal::SigSafeArena());
+
+  if (buf == nullptr) {
+    frames_ = nullptr;
+    sizes_ = nullptr;
+    return;
+  }
+
+  frames_ = new (buf) uintptr_t[length];
+  sizes_ = new (static_cast<void*>(static_cast<unsigned char*>(buf) +
+                                   length * sizeof(*frames_))) int[length];
+}
+
+BorrowedFixupBuffer::FixupStackBuffer* BorrowedFixupBuffer::Find() {
+  size_t i = absl::Hash<const void*>()(this) %
+             std::size(FixupStackBuffer::g_instances);
+  return &FixupStackBuffer::g_instances[i];
+}
+
+[[nodiscard]] BorrowedFixupBuffer::FixupStackBuffer*
+BorrowedFixupBuffer::TryLock() {
+  FixupStackBuffer* instance = Find();
+  // Use memory_order_acquire to ensure that no reads and writes on the borrowed
+  // buffer are reordered before the borrowing.
+  return !instance->in_use.test_and_set(std::memory_order_acquire) ? instance
+                                                                   : nullptr;
+}
+
+void BorrowedFixupBuffer::Unlock() {
+  // Use memory_order_release to ensure that no reads and writes on the borrowed
+  // buffer are reordered after the borrowing.
+  Find()->in_use.clear(std::memory_order_release);
+}
+
+}  // namespace internal_stacktrace
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h
new file mode 100644
index 0000000..c5ea7a39
--- /dev/null
+++ b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h
@@ -0,0 +1,74 @@
+// Copyright 2025 The Abseil Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef ABSL_DEBUGGING_INTERNAL_BORROWED_FIXUP_BUFFER_H_
+#define ABSL_DEBUGGING_INTERNAL_BORROWED_FIXUP_BUFFER_H_
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#include "absl/base/config.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace internal_stacktrace {
+
+// An RAII type that temporarily acquires a buffer for stack trace fix-ups from
+// a pool of preallocated buffers, or attempts to allocate a new buffer if no
+// such buffer is available.
+// When destroyed, returns the buffer to the pool if it borrowed successfully,
+// otherwise deallocates any previously allocated buffer.
+class BorrowedFixupBuffer {
+ public:
+  static constexpr size_t kNumStaticBuffers = 64;
+  ~BorrowedFixupBuffer();
+
+  // The number of frames to allocate space for. Note that allocations can fail.
+  explicit BorrowedFixupBuffer(size_t length);
+
+  uintptr_t* frames() const { return frames_; }
+  int* sizes() const { return sizes_; }
+
+ private:
+  uintptr_t* frames_;
+  int* sizes_;
+
+  // Have we borrowed a pre-existing buffer (vs. allocated our own)?
+  bool borrowed_;
+
+  struct FixupStackBuffer;
+
+  void InitViaBorrow(FixupStackBuffer* borrowed_buffer);
+  void InitViaAllocation(size_t length);
+
+  // Returns a non-null pointer to a buffer that could be potentially borrowed.
+  FixupStackBuffer* Find();
+
+  // Attempts to opportunistically borrow a small buffer in a thread- and
+  // signal-safe manner. Returns nullptr on failure.
+  [[nodiscard]] FixupStackBuffer* TryLock();
+
+  // Returns the borrowed buffer.
+  void Unlock();
+
+  BorrowedFixupBuffer(const BorrowedFixupBuffer&) = delete;
+  BorrowedFixupBuffer& operator=(const BorrowedFixupBuffer&) = delete;
+};
+
+}  // namespace internal_stacktrace
+ABSL_NAMESPACE_END
+}  // namespace absl
+
+#endif  // ABSL_DEBUGGING_INTERNAL_BORROWED_FIXUP_BUFFER_H_
diff --git a/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc
new file mode 100644
index 0000000..a856c5d
--- /dev/null
+++ b/third_party/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc
@@ -0,0 +1,97 @@
+// Copyright 2025 The Abseil Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "absl/debugging/internal/borrowed_fixup_buffer.h"
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <algorithm>
+#include <functional>
+#include <memory>
+
+#include "gtest/gtest.h"
+#include "absl/base/config.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace internal_stacktrace {
+namespace {
+
+TEST(BorrowedFixupBuffer, ProperReuse) {
+  uintptr_t first_borrowed_frame = 0;
+  uintptr_t first_borrowed_size = 0;
+
+  // Ensure that we borrow the same buffer each time, indicating proper reuse.
+  // Disable loop unrolling. We need all iterations to match exactly, to coax
+  // reuse of the the same underlying buffer.
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC unroll 1  // <= 1 disables unrolling
+#endif
+  for (int i = 0; i < 100; ++i) {
+    BorrowedFixupBuffer buf0(0);
+    EXPECT_EQ(buf0.frames(), nullptr);
+    EXPECT_EQ(buf0.sizes(), nullptr);
+
+    BorrowedFixupBuffer buf1(1);
+    EXPECT_NE(buf1.frames(), nullptr);
+    EXPECT_NE(buf1.sizes(), nullptr);
+    if (first_borrowed_frame == 0) {
+      first_borrowed_frame = reinterpret_cast<uintptr_t>(buf1.frames());
+    } else {
+      EXPECT_EQ(reinterpret_cast<uintptr_t>(buf1.frames()),
+                first_borrowed_frame);
+    }
+    if (first_borrowed_size == 0) {
+      first_borrowed_size = reinterpret_cast<uintptr_t>(buf1.sizes());
+    } else {
+      EXPECT_EQ(reinterpret_cast<uintptr_t>(buf1.sizes()), first_borrowed_size);
+    }
+
+    BorrowedFixupBuffer buf2(2);
+    EXPECT_NE(buf2.frames(), buf1.frames());
+    EXPECT_NE(buf2.sizes(), buf1.sizes());
+    EXPECT_NE(buf2.frames(), nullptr);
+    EXPECT_NE(buf2.sizes(), nullptr);
+  }
+}
+
+TEST(BorrowedFixupBuffer, NoOverlap) {
+  using BufferPtr = std::unique_ptr<BorrowedFixupBuffer>;
+  static constexpr std::less<const void*> less;
+  static constexpr size_t kBufLen = 5;
+  static constexpr size_t kNumBuffers =
+      BorrowedFixupBuffer::kNumStaticBuffers * 37 + 1;
+
+  auto bufs = std::make_unique<BufferPtr[]>(kNumBuffers);
+  for (size_t i = 0; i < kNumBuffers; ++i) {
+    bufs[i] = std::make_unique<BorrowedFixupBuffer>(kBufLen);
+  }
+
+  std::sort(bufs.get(), bufs.get() + kNumBuffers,
+            [](const BufferPtr& a, const BufferPtr& b) {
+              return less(a->frames(), b->frames());
+            });
+
+  // Verify there are no overlaps
+  for (size_t i = 1; i < kNumBuffers; ++i) {
+    EXPECT_FALSE(less(bufs[i]->frames(), bufs[i - 1]->frames() + kBufLen));
+    EXPECT_FALSE(less(bufs[i]->sizes(), bufs[i - 1]->sizes() + kBufLen));
+  }
+}
+
+}  // namespace
+}  // namespace internal_stacktrace
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/debugging/stacktrace.cc b/third_party/abseil-cpp/absl/debugging/stacktrace.cc
index acc8b66..aee065d 100644
--- a/third_party/abseil-cpp/absl/debugging/stacktrace.cc
+++ b/third_party/abseil-cpp/absl/debugging/stacktrace.cc
@@ -42,14 +42,12 @@
 
 #include <algorithm>
 #include <atomic>
-#include <iterator>
-#include <type_traits>
 
 #include "absl/base/attributes.h"
 #include "absl/base/config.h"
-#include "absl/base/internal/low_level_alloc.h"
 #include "absl/base/optimization.h"
 #include "absl/base/port.h"
+#include "absl/debugging/internal/borrowed_fixup_buffer.h"
 #include "absl/debugging/internal/stacktrace_config.h"
 
 #if defined(ABSL_STACKTRACE_INL_HEADER)
@@ -75,37 +73,14 @@
 typedef int (*Unwinder)(void**, int*, int, int, const void*, int*);
 std::atomic<Unwinder> custom;
 
-constexpr size_t kMinPageSize = 4096;
-
-struct FixupBuffer {
-  static constexpr size_t kMaxStackElements = 128;  // Can be reduced if needed
-  uintptr_t frames[kMaxStackElements];
-  int sizes[kMaxStackElements];
-};
-static_assert(std::is_trivially_default_constructible_v<FixupBuffer>);
-static_assert(sizeof(FixupBuffer) < kMinPageSize / 2,
-              "buffer size should no larger than a small fraction of a page, "
-              "to avoid stack overflows");
-
 template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
-ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(
-    void** result, uintptr_t* frames, int* sizes, size_t max_depth,
-    int skip_count, const void* uc, int* min_dropped_frames,
-    FixupBuffer* fixup_buffer /* if NULL, fixups are skipped */) {
-  // Allocate a buffer dynamically, using the signal-safe allocator.
-  static constexpr auto allocate = [](size_t num_bytes) -> void* {
-    base_internal::InitSigSafeArena();
-    return base_internal::LowLevelAlloc::AllocWithArena(
-        num_bytes, base_internal::SigSafeArena());
-  };
-
-  // We only need to free the buffers if we allocated them with the signal-safe
-  // allocator.
-  bool must_free_frames = false;
-  bool must_free_sizes = false;
-
-  bool unwind_with_fixup =
-      fixup_buffer != nullptr && internal_stacktrace::ShouldFixUpStack();
+ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
+                                               int* sizes, size_t max_depth,
+                                               int skip_count, const void* uc,
+                                               int* min_dropped_frames,
+                                               bool unwind_with_fixup = true) {
+  unwind_with_fixup =
+      unwind_with_fixup && internal_stacktrace::ShouldFixUpStack();
 
 #ifdef _WIN32
   if (unwind_with_fixup) {
@@ -117,29 +92,17 @@
   }
 #endif
 
-  if (unwind_with_fixup) {
-    // Some implementations of FixUpStack may need to be passed frame
-    // information from Unwind, even if the caller doesn't need that
-    // information. We allocate the necessary buffers for such implementations
-    // here.
-
-    if (frames == nullptr) {
-      if (max_depth <= std::size(fixup_buffer->frames)) {
-        frames = fixup_buffer->frames;
-      } else {
-        frames = static_cast<uintptr_t*>(allocate(max_depth * sizeof(*frames)));
-        must_free_frames = true;
-      }
-    }
-
-    if (sizes == nullptr) {
-      if (max_depth <= std::size(fixup_buffer->sizes)) {
-        sizes = fixup_buffer->sizes;
-      } else {
-        sizes = static_cast<int*>(allocate(max_depth * sizeof(*sizes)));
-        must_free_sizes = true;
-      }
-    }
+  // Some implementations of FixUpStack may need to be passed frame
+  // information from Unwind, even if the caller doesn't need that
+  // information. We allocate the necessary buffers for such implementations
+  // here.
+  const internal_stacktrace::BorrowedFixupBuffer fixup_buffer(
+      unwind_with_fixup ? max_depth : 0);
+  if (frames == nullptr) {
+    frames = fixup_buffer.frames();
+  }
+  if (sizes == nullptr) {
+    sizes = fixup_buffer.sizes();
   }
 
   Unwinder g = custom.load(std::memory_order_acquire);
@@ -167,14 +130,6 @@
     internal_stacktrace::FixUpStack(result, frames, sizes, max_depth, size);
   }
 
-  if (must_free_sizes) {
-    base_internal::LowLevelAlloc::Free(sizes);
-  }
-
-  if (must_free_frames) {
-    base_internal::LowLevelAlloc::Free(frames);
-  }
-
   ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
   return static_cast<int>(size);
 }
@@ -184,10 +139,9 @@
 ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
 internal_stacktrace::GetStackFrames(void** result, uintptr_t* frames,
                                     int* sizes, int max_depth, int skip_count) {
-  FixupBuffer fixup_stack_buf;
   return Unwind<true, false>(result, frames, sizes,
                              static_cast<size_t>(max_depth), skip_count,
-                             nullptr, nullptr, &fixup_stack_buf);
+                             nullptr, nullptr);
 }
 
 ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
@@ -195,10 +149,9 @@
                                                int* sizes, int max_depth,
                                                int skip_count, const void* uc,
                                                int* min_dropped_frames) {
-  FixupBuffer fixup_stack_buf;
   return Unwind<true, true>(result, frames, sizes,
                             static_cast<size_t>(max_depth), skip_count, uc,
-                            min_dropped_frames, &fixup_stack_buf);
+                            min_dropped_frames);
 }
 
 ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
@@ -206,24 +159,22 @@
                                           int skip_count) {
   return Unwind<false, false>(result, nullptr, nullptr,
                               static_cast<size_t>(max_depth), skip_count,
-                              nullptr, nullptr, nullptr);
+                              nullptr, nullptr, /*unwind_with_fixup=*/false);
 }
 
 ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackTrace(
     void** result, int max_depth, int skip_count) {
-  FixupBuffer fixup_stack_buf;
   return Unwind<false, false>(result, nullptr, nullptr,
                               static_cast<size_t>(max_depth), skip_count,
-                              nullptr, nullptr, &fixup_stack_buf);
+                              nullptr, nullptr);
 }
 
 ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
 GetStackTraceWithContext(void** result, int max_depth, int skip_count,
                          const void* uc, int* min_dropped_frames) {
-  FixupBuffer fixup_stack_buf;
   return Unwind<false, true>(result, nullptr, nullptr,
                              static_cast<size_t>(max_depth), skip_count, uc,
-                             min_dropped_frames, &fixup_stack_buf);
+                             min_dropped_frames);
 }
 
 void SetStackUnwinder(Unwinder w) {
diff --git a/third_party/abseil-cpp/absl/debugging/stacktrace_benchmark.cc b/third_party/abseil-cpp/absl/debugging/stacktrace_benchmark.cc
index 9360bafe..eef9850 100644
--- a/third_party/abseil-cpp/absl/debugging/stacktrace_benchmark.cc
+++ b/third_party/abseil-cpp/absl/debugging/stacktrace_benchmark.cc
@@ -12,12 +12,25 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include <stddef.h>
+#include <stdint.h>
+
 #include "absl/base/attributes.h"
 #include "absl/base/config.h"
 #include "absl/base/optimization.h"
+#include "absl/cleanup/cleanup.h"
 #include "absl/debugging/stacktrace.h"
 #include "benchmark/benchmark.h"
 
+static bool g_enable_fixup = false;
+
+#if ABSL_HAVE_ATTRIBUTE_WEAK
+// Override these weak symbols if possible.
+bool absl::internal_stacktrace::ShouldFixUpStack() { return g_enable_fixup; }
+void absl::internal_stacktrace::FixUpStack(void**, uintptr_t*, int*, size_t,
+                                           size_t&) {}
+#endif
+
 namespace absl {
 ABSL_NAMESPACE_BEGIN
 namespace {
@@ -42,14 +55,24 @@
   func(state, --x, depth);
 }
 
+template <bool EnableFixup>
 void BM_GetStackTrace(benchmark::State& state) {
+  const Cleanup restore_state(
+      [prev = g_enable_fixup]() { g_enable_fixup = prev; });
+  g_enable_fixup = EnableFixup;
   int depth = state.range(0);
   for (auto s : state) {
     func(state, depth, depth);
   }
 }
 
-BENCHMARK(BM_GetStackTrace)->DenseRange(10, kMaxStackDepth, 10);
+#if ABSL_HAVE_ATTRIBUTE_WEAK
+auto& BM_GetStackTraceWithFixup = BM_GetStackTrace<true>;
+BENCHMARK(BM_GetStackTraceWithFixup)->DenseRange(10, kMaxStackDepth, 10);
+#endif
+
+auto& BM_GetStackTraceWithoutFixup = BM_GetStackTrace<false>;
+BENCHMARK(BM_GetStackTraceWithoutFixup)->DenseRange(10, kMaxStackDepth, 10);
 }  // namespace
 ABSL_NAMESPACE_END
 }  // namespace absl
diff --git a/third_party/abseil-cpp/absl/profiling/BUILD.bazel b/third_party/abseil-cpp/absl/profiling/BUILD.bazel
index 5afdb96..00571b2 100644
--- a/third_party/abseil-cpp/absl/profiling/BUILD.bazel
+++ b/third_party/abseil-cpp/absl/profiling/BUILD.bazel
@@ -161,6 +161,7 @@
         "//absl/container:btree",
         "//absl/container:flat_hash_map",
         "//absl/strings",
+        "//absl/strings:str_format",
         "//absl/types:span",
     ],
 )
diff --git a/third_party/abseil-cpp/absl/profiling/BUILD.gn b/third_party/abseil-cpp/absl/profiling/BUILD.gn
index 23764a27..4ec5051 100644
--- a/third_party/abseil-cpp/absl/profiling/BUILD.gn
+++ b/third_party/abseil-cpp/absl/profiling/BUILD.gn
@@ -74,6 +74,7 @@
     "//third_party/abseil-cpp/absl/container:btree",
     "//third_party/abseil-cpp/absl/container:flat_hash_map",
     "//third_party/abseil-cpp/absl/strings",
+    "//third_party/abseil-cpp/absl/strings:str_format",
     "//third_party/abseil-cpp/absl/types:span",
   ]
 }
diff --git a/third_party/abseil-cpp/absl/profiling/CMakeLists.txt b/third_party/abseil-cpp/absl/profiling/CMakeLists.txt
index 4807f0dde..6441daec 100644
--- a/third_party/abseil-cpp/absl/profiling/CMakeLists.txt
+++ b/third_party/abseil-cpp/absl/profiling/CMakeLists.txt
@@ -109,6 +109,7 @@
     absl::flat_hash_map
     absl::btree
     absl::strings
+    absl::str_format
     absl::span
 )
 
diff --git a/third_party/abseil-cpp/absl/profiling/hashtable.cc b/third_party/abseil-cpp/absl/profiling/hashtable.cc
index 407c6b4..17148d1 100644
--- a/third_party/abseil-cpp/absl/profiling/hashtable.cc
+++ b/third_party/abseil-cpp/absl/profiling/hashtable.cc
@@ -60,6 +60,7 @@
   const auto capacity_id = builder.InternString("capacity");
   const auto size_id = builder.InternString("size");
   const auto num_erases_id = builder.InternString("num_erases");
+  const auto num_insert_hits_id = builder.InternString("num_insert_hits");
   const auto num_rehashes_id = builder.InternString("num_rehashes");
   const auto max_probe_length_id = builder.InternString("max_probe_length");
   const auto total_probe_length_id = builder.InternString("total_probe_length");
@@ -89,6 +90,9 @@
         add_label(size_id, info.size.load(std::memory_order_relaxed));
         add_label(num_erases_id,
                   info.num_erases.load(std::memory_order_relaxed));
+        // TODO(b/436909492): Revisit whether this value is useful.
+        add_label(num_insert_hits_id,
+                  info.num_insert_hits.load(std::memory_order_relaxed));
         add_label(num_rehashes_id,
                   info.num_rehashes.load(std::memory_order_relaxed));
         add_label(max_probe_length_id,
diff --git a/third_party/abseil-cpp/absl/profiling/internal/profile_builder.cc b/third_party/abseil-cpp/absl/profiling/internal/profile_builder.cc
index f0bb40b7..1ca0d3b1 100644
--- a/third_party/abseil-cpp/absl/profiling/internal/profile_builder.cc
+++ b/third_party/abseil-cpp/absl/profiling/internal/profile_builder.cc
@@ -32,6 +32,7 @@
 #include "absl/base/internal/raw_logging.h"
 #include "absl/strings/escaping.h"
 #include "absl/strings/str_cat.h"
+#include "absl/strings/str_format.h"
 #include "absl/types/span.h"
 
 namespace absl {
diff --git a/third_party/abseil-cpp/absl/status/status.cc b/third_party/abseil-cpp/absl/status/status.cc
index 963dab67..f219933 100644
--- a/third_party/abseil-cpp/absl/status/status.cc
+++ b/third_party/abseil-cpp/absl/status/status.cc
@@ -47,6 +47,10 @@
     "absl::Status assumes it can use the bottom 2 bits of a StatusRep*.");
 
 std::string StatusCodeToString(StatusCode code) {
+  return std::string(absl::StatusCodeToStringView(code));
+}
+
+absl::string_view StatusCodeToStringView(StatusCode code) {
   switch (code) {
     case StatusCode::kOk:
       return "OK";
diff --git a/third_party/abseil-cpp/absl/status/status.h b/third_party/abseil-cpp/absl/status/status.h
index 45168225..b26d072 100644
--- a/third_party/abseil-cpp/absl/status/status.h
+++ b/third_party/abseil-cpp/absl/status/status.h
@@ -284,6 +284,11 @@
 // Returns the name for the status code, or "" if it is an unknown value.
 std::string StatusCodeToString(StatusCode code);
 
+// StatusCodeToStringView()
+//
+// Same as StatusCodeToString(), but returns a string_view.
+absl::string_view StatusCodeToStringView(StatusCode code);
+
 // operator<<
 //
 // Streams StatusCodeToString(code) to `os`.
diff --git a/third_party/abseil-cpp/absl/status/status_test.cc b/third_party/abseil-cpp/absl/status/status_test.cc
index c3327ad7..f6ac0c0 100644
--- a/third_party/abseil-cpp/absl/status/status_test.cc
+++ b/third_party/abseil-cpp/absl/status/status_test.cc
@@ -39,6 +39,7 @@
   std::ostringstream oss;
   oss << code;
   EXPECT_EQ(oss.str(), absl::StatusCodeToString(code));
+  EXPECT_EQ(oss.str(), absl::StatusCodeToStringView(code));
 }
 
 // This structure holds the details for testing a single error code,
diff --git a/third_party/abseil-cpp/absl/strings/str_split.h b/third_party/abseil-cpp/absl/strings/str_split.h
index cf53ccf..29fa4f7 100644
--- a/third_party/abseil-cpp/absl/strings/str_split.h
+++ b/third_party/abseil-cpp/absl/strings/str_split.h
@@ -382,7 +382,7 @@
 //   // v[0] == " a ", v[1] == " ", v[2] == "b"
 struct SkipWhitespace {
   bool operator()(absl::string_view sp) const {
-    sp = absl::StripAsciiWhitespace(sp);
+    sp = absl::StripLeadingAsciiWhitespace(sp);
     return !sp.empty();
   }
 };
diff --git a/third_party/abseil-cpp/absl/strings/string_view.h b/third_party/abseil-cpp/absl/strings/string_view.h
index 2f0a0fd..49df37c 100644
--- a/third_party/abseil-cpp/absl/strings/string_view.h
+++ b/third_party/abseil-cpp/absl/strings/string_view.h
@@ -227,7 +227,7 @@
   constexpr string_view(  // NOLINT(runtime/explicit)
       const char* absl_nonnull str)
       : ptr_(str), length_(str ? StrlenInternal(str) : 0) {
-    assert(str != nullptr);
+    ABSL_HARDENING_ASSERT(str != nullptr);
   }
 
   // Constructor of a `string_view` from a `const char*` and length.
diff --git a/third_party/abseil-cpp/absl/synchronization/notification.h b/third_party/abseil-cpp/absl/synchronization/notification.h
index 1ceffdb6..12df31b 100644
--- a/third_party/abseil-cpp/absl/synchronization/notification.h
+++ b/third_party/abseil-cpp/absl/synchronization/notification.h
@@ -52,7 +52,7 @@
 
 #include <atomic>
 
-#include "absl/base/attributes.h"
+#include "absl/base/config.h"
 #include "absl/base/internal/tracing.h"
 #include "absl/synchronization/mutex.h"
 #include "absl/time/time.h"
diff --git a/third_party/abseil-cpp/symbols_arm64_dbg.def b/third_party/abseil-cpp/symbols_arm64_dbg.def
index 52f2db8..cd95dcb9 100644
--- a/third_party/abseil-cpp/symbols_arm64_dbg.def
+++ b/third_party/abseil-cpp/symbols_arm64_dbg.def
@@ -358,6 +358,7 @@
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEB_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@@Z
+    ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PEBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBX@Z
     ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAEAVStringifySink@strings_internal@0@UHex@0@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXV?$Span@QEAUCordRep@cord_internal@absl@@@2@@Z
@@ -590,6 +591,7 @@
     ??$IntegerToString@_J@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_J@Z
     ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBH@Z
+    ??$Invoke@VMixingHashState@hash_internal@absl@@PEBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBQEBX@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEB_K@__Cr@std@@@Z
@@ -1313,6 +1315,7 @@
     ??$call_once@A6AXXZ$$V@absl@@YAXAEAVonce_flag@0@A6AXXZ@Z
     ??$call_once@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@absl@@YAXAEAVonce_flag@0@$$QEAP8FlagImpl@flags_internal@0@EAAXXZ$$QEAPEAV230@@Z
     ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBH@Z
+    ??$combine@PEBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBQEBX@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z
     ??$combine@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
@@ -1530,6 +1533,7 @@
     ??$get@$0A@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YAAEBQEAVCommandLineFlag@absl@@AEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@@Z
     ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QEAPEAVCommandLineFlag@absl@@$$QEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z
     ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z
+    ??$hash@PEBX@MixingHashState@hash_internal@absl@@SA_KAEBQEBX@Z
     ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBUStringHash@container_internal@2@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
@@ -1539,6 +1543,7 @@
     ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBD_K@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@U?$integer_sequence@_K$0A@$00@45@@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@U?$integer_sequence@_K$0A@@45@@Z
+    ??$hash_with_seed@PEBX$0A@@MixingHashState@hash_internal@absl@@SA_KAEBQEBX_K@Z
     ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash_with_seed@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@_K@Z
     ??$hash_with_seed@V?$tuple@AEB_K@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEB_K@__Cr@std@@_K@Z
@@ -1642,6 +1647,7 @@
     ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAKH@Z
     ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_JH@Z
     ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_KH@Z
+    ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YA_KAEAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z
     ??$swap@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@0@Z
     ??$swap@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAEAPEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z
     ??$swap@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAUTransition@cctz@time_internal@absl@@0@Z
@@ -1969,6 +1975,7 @@
     ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z
     ??0BestHints@flags_internal@absl@@QEAA@E@Z
     ??0BlockingCounter@absl@@QEAA@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z
     ??0BoundConversion@str_format_internal@absl@@QEAA@XZ
     ??0Breakdown@Time@absl@@QEAA@XZ
     ??0BufferRawSink@str_format_internal@absl@@QEAA@PEAD_K@Z
@@ -2284,6 +2291,7 @@
     ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ
     ??1BadStatusOrAccess@absl@@UEAA@XZ
     ??1BestHints@flags_internal@absl@@QEAA@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ
     ??1ByAnyChar@absl@@QEAA@XZ
     ??1CRC32@crc_internal@absl@@UEAA@XZ
     ??1CRC@crc_internal@absl@@UEAA@XZ
@@ -2757,6 +2765,7 @@
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@absl@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@1@@Z
     ??R?$FunctionRef@$$A6A_K_K@Z@absl@@QEBA_K_K@Z
+    ??R?$HashImpl@PEBX@hash_internal@absl@@QEBA_KAEBQEBX@Z
     ??R?$HashImpl@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??R?$HashImpl@V?$tuple@AEB_K@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEB_K@__Cr@std@@@Z
     ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QEBA_K_K@Z
@@ -3279,6 +3288,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
@@ -3574,6 +3584,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z
@@ -3911,6 +3923,7 @@
     ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
     ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ
     ?RecordEraseSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
+    ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ
     ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QEAAX_K0@Z
     ?RecordInsertMissSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@_K1@Z
     ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QEAAX_K@Z
@@ -4121,6 +4134,7 @@
     ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -4267,6 +4281,7 @@
     ?TrailingZeros@?$NonIterableBitMask@_K$07$02@container_internal@absl@@QEBAIXZ
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?TryLockImpl@SpinLock@base_internal@absl@@AEAA_NXZ
     ?TryLockInternal@SpinLock@base_internal@absl@@AEAAIII@Z
     ?TryLockSlow@Mutex@absl@@AEAA_NXZ
@@ -4301,6 +4316,7 @@
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UniversalEpoch@absl@@YA?AVTime@1@XZ
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -5274,11 +5290,13 @@
     ?flat@CordRep@cord_internal@absl@@QEAAPEAUCordRepFlat@23@XZ
     ?flat@CordRep@cord_internal@absl@@QEBAPEBUCordRepFlat@23@XZ
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
+    ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEA_KXZ
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
     ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ
     ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?gbswap_16@absl@@YAGG@Z
     ?gbswap_32@absl@@YAII@Z
     ?gbswap_64@absl@@YA_K_K@Z
@@ -5711,6 +5729,7 @@
     ?size@HashtableSize@container_internal@absl@@QEBA_KXZ
     ?size@InlineRep@Cord@absl@@QEBA_KXZ
     ?size@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBA_KXZ
+    ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEAHXZ
     ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXXZ
     ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@XZ
     ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_arm64_dbg_cxx23.def b/third_party/abseil-cpp/symbols_arm64_dbg_cxx23.def
index f5553788..38907b5e 100644
--- a/third_party/abseil-cpp/symbols_arm64_dbg_cxx23.def
+++ b/third_party/abseil-cpp/symbols_arm64_dbg_cxx23.def
@@ -358,6 +358,7 @@
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEB_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@@Z
+    ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PEBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBX@Z
     ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAEAVStringifySink@strings_internal@0@UHex@0@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXV?$Span@QEAUCordRep@cord_internal@absl@@@2@@Z
@@ -590,6 +591,7 @@
     ??$IntegerToString@_J@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_J@Z
     ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBH@Z
+    ??$Invoke@VMixingHashState@hash_internal@absl@@PEBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBQEBX@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEB_K@__Cr@std@@@Z
@@ -1318,6 +1320,7 @@
     ??$call_once@A6AXXZ$$V@absl@@YAXAEAVonce_flag@0@A6AXXZ@Z
     ??$call_once@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@absl@@YAXAEAVonce_flag@0@$$QEAP8FlagImpl@flags_internal@0@EAAXXZ$$QEAPEAV230@@Z
     ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBH@Z
+    ??$combine@PEBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBQEBX@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z
     ??$combine@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
@@ -1535,6 +1538,7 @@
     ??$get@$0A@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YAAEBQEAVCommandLineFlag@absl@@AEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@@Z
     ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QEAPEAVCommandLineFlag@absl@@$$QEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z
     ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z
+    ??$hash@PEBX@MixingHashState@hash_internal@absl@@SA_KAEBQEBX@Z
     ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBUStringHash@container_internal@2@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
@@ -1544,6 +1548,7 @@
     ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBD_K@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@U?$integer_sequence@_K$0A@$00@45@@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@U?$integer_sequence@_K$0A@@45@@Z
+    ??$hash_with_seed@PEBX$0A@@MixingHashState@hash_internal@absl@@SA_KAEBQEBX_K@Z
     ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash_with_seed@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@_K@Z
     ??$hash_with_seed@V?$tuple@AEB_K@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEB_K@__Cr@std@@_K@Z
@@ -1655,6 +1660,7 @@
     ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAKH@Z
     ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_JH@Z
     ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_KH@Z
+    ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YA_KAEAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z
     ??$swap@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@0@Z
     ??$swap@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAEAPEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z
     ??$swap@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAUTransition@cctz@time_internal@absl@@0@Z
@@ -1982,6 +1988,7 @@
     ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z
     ??0BestHints@flags_internal@absl@@QEAA@E@Z
     ??0BlockingCounter@absl@@QEAA@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z
     ??0BoundConversion@str_format_internal@absl@@QEAA@XZ
     ??0Breakdown@Time@absl@@QEAA@XZ
     ??0BufferRawSink@str_format_internal@absl@@QEAA@PEAD_K@Z
@@ -2297,6 +2304,7 @@
     ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ
     ??1BadStatusOrAccess@absl@@UEAA@XZ
     ??1BestHints@flags_internal@absl@@QEAA@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ
     ??1ByAnyChar@absl@@QEAA@XZ
     ??1CRC32@crc_internal@absl@@UEAA@XZ
     ??1CRC@crc_internal@absl@@UEAA@XZ
@@ -2754,6 +2762,7 @@
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@absl@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@1@@Z
     ??R?$FunctionRef@$$A6A_K_K@Z@absl@@QEBA_K_K@Z
+    ??R?$HashImpl@PEBX@hash_internal@absl@@QEBA_KAEBQEBX@Z
     ??R?$HashImpl@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??R?$HashImpl@V?$tuple@AEB_K@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEB_K@__Cr@std@@@Z
     ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QEBA_K_K@Z
@@ -3276,6 +3285,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
@@ -3571,6 +3581,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z
@@ -3908,6 +3920,7 @@
     ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
     ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ
     ?RecordEraseSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
+    ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ
     ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QEAAX_K0@Z
     ?RecordInsertMissSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@_K1@Z
     ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QEAAX_K@Z
@@ -4118,6 +4131,7 @@
     ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -4264,6 +4278,7 @@
     ?TrailingZeros@?$NonIterableBitMask@_K$07$02@container_internal@absl@@QEBAIXZ
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?TryLockImpl@SpinLock@base_internal@absl@@AEAA_NXZ
     ?TryLockInternal@SpinLock@base_internal@absl@@AEAAIII@Z
     ?TryLockSlow@Mutex@absl@@AEAA_NXZ
@@ -4298,6 +4313,7 @@
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UniversalEpoch@absl@@YA?AVTime@1@XZ
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -5284,11 +5300,13 @@
     ?flat@CordRep@cord_internal@absl@@QEAAPEAUCordRepFlat@23@XZ
     ?flat@CordRep@cord_internal@absl@@QEBAPEBUCordRepFlat@23@XZ
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
+    ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEA_KXZ
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
     ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ
     ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?gbswap_16@absl@@YAGG@Z
     ?gbswap_32@absl@@YAII@Z
     ?gbswap_64@absl@@YA_K_K@Z
@@ -5721,6 +5739,7 @@
     ?size@HashtableSize@container_internal@absl@@QEBA_KXZ
     ?size@InlineRep@Cord@absl@@QEBA_KXZ
     ?size@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBA_KXZ
+    ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEAHXZ
     ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXXZ
     ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@XZ
     ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_arm64_rel.def b/third_party/abseil-cpp/symbols_arm64_rel.def
index 1f4121cc..ba363e9c 100644
--- a/third_party/abseil-cpp/symbols_arm64_rel.def
+++ b/third_party/abseil-cpp/symbols_arm64_rel.def
@@ -204,6 +204,7 @@
     ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z
     ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z
     ??0BlockingCounter@absl@@QEAA@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z
     ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??0ByLength@absl@@QEAA@_J@Z
     ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
@@ -259,6 +260,7 @@
     ??0uint128@absl@@QEAA@O@Z
     ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
     ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ
     ??1CRC@crc_internal@absl@@UEAA@XZ
     ??1Cord@absl@@QEAA@XZ
     ??1CordzHandle@cord_internal@absl@@MEAA@XZ
@@ -627,6 +629,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
@@ -790,6 +793,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z
@@ -1122,6 +1127,7 @@
     ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -1216,6 +1222,7 @@
     ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?TryLockSlow@Mutex@absl@@AEAA_NXZ
     ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ
     ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z
@@ -1237,6 +1244,7 @@
     ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -1320,6 +1328,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z
     ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_arm64_rel_cxx23.def b/third_party/abseil-cpp/symbols_arm64_rel_cxx23.def
index 7240e4af..7c4c13c 100644
--- a/third_party/abseil-cpp/symbols_arm64_rel_cxx23.def
+++ b/third_party/abseil-cpp/symbols_arm64_rel_cxx23.def
@@ -204,6 +204,7 @@
     ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z
     ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z
     ??0BlockingCounter@absl@@QEAA@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z
     ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??0ByLength@absl@@QEAA@_J@Z
     ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
@@ -259,6 +260,7 @@
     ??0uint128@absl@@QEAA@O@Z
     ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
     ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ
     ??1CRC@crc_internal@absl@@UEAA@XZ
     ??1Cord@absl@@QEAA@XZ
     ??1CordzHandle@cord_internal@absl@@MEAA@XZ
@@ -627,6 +629,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
@@ -790,6 +793,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z
@@ -1122,6 +1127,7 @@
     ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -1216,6 +1222,7 @@
     ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?TryLockSlow@Mutex@absl@@AEAA_NXZ
     ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ
     ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z
@@ -1237,6 +1244,7 @@
     ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -1320,6 +1328,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z
     ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x64_dbg.def b/third_party/abseil-cpp/symbols_x64_dbg.def
index e3f9190d..3d3a4dd 100644
--- a/third_party/abseil-cpp/symbols_x64_dbg.def
+++ b/third_party/abseil-cpp/symbols_x64_dbg.def
@@ -358,6 +358,7 @@
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEB_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@@Z
+    ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PEBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBX@Z
     ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAEAVStringifySink@strings_internal@0@UHex@0@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXV?$Span@QEAUCordRep@cord_internal@absl@@@2@@Z
@@ -590,6 +591,7 @@
     ??$IntegerToString@_J@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_J@Z
     ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBH@Z
+    ??$Invoke@VMixingHashState@hash_internal@absl@@PEBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBQEBX@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEB_K@__Cr@std@@@Z
@@ -1313,6 +1315,7 @@
     ??$call_once@A6AXXZ$$V@absl@@YAXAEAVonce_flag@0@A6AXXZ@Z
     ??$call_once@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@absl@@YAXAEAVonce_flag@0@$$QEAP8FlagImpl@flags_internal@0@EAAXXZ$$QEAPEAV230@@Z
     ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBH@Z
+    ??$combine@PEBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBQEBX@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z
     ??$combine@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
@@ -1530,6 +1533,7 @@
     ??$get@$0A@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YAAEBQEAVCommandLineFlag@absl@@AEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@@Z
     ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QEAPEAVCommandLineFlag@absl@@$$QEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z
     ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z
+    ??$hash@PEBX@MixingHashState@hash_internal@absl@@SA_KAEBQEBX@Z
     ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBUStringHash@container_internal@2@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
@@ -1539,6 +1543,7 @@
     ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBD_K@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@U?$integer_sequence@_K$0A@$00@45@@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@U?$integer_sequence@_K$0A@@45@@Z
+    ??$hash_with_seed@PEBX$0A@@MixingHashState@hash_internal@absl@@SA_KAEBQEBX_K@Z
     ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash_with_seed@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@_K@Z
     ??$hash_with_seed@V?$tuple@AEB_K@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEB_K@__Cr@std@@_K@Z
@@ -1642,6 +1647,7 @@
     ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAKH@Z
     ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_JH@Z
     ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_KH@Z
+    ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YA_KAEAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z
     ??$swap@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@0@Z
     ??$swap@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAEAPEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z
     ??$swap@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAUTransition@cctz@time_internal@absl@@0@Z
@@ -1970,6 +1976,7 @@
     ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z
     ??0BestHints@flags_internal@absl@@QEAA@E@Z
     ??0BlockingCounter@absl@@QEAA@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z
     ??0BoundConversion@str_format_internal@absl@@QEAA@XZ
     ??0Breakdown@Time@absl@@QEAA@XZ
     ??0BufferRawSink@str_format_internal@absl@@QEAA@PEAD_K@Z
@@ -2285,6 +2292,7 @@
     ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ
     ??1BadStatusOrAccess@absl@@UEAA@XZ
     ??1BestHints@flags_internal@absl@@QEAA@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ
     ??1ByAnyChar@absl@@QEAA@XZ
     ??1CRC32@crc_internal@absl@@UEAA@XZ
     ??1CRC@crc_internal@absl@@UEAA@XZ
@@ -2758,6 +2766,7 @@
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@absl@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@1@@Z
     ??R?$FunctionRef@$$A6A_K_K@Z@absl@@QEBA_K_K@Z
+    ??R?$HashImpl@PEBX@hash_internal@absl@@QEBA_KAEBQEBX@Z
     ??R?$HashImpl@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??R?$HashImpl@V?$tuple@AEB_K@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEB_K@__Cr@std@@@Z
     ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QEBA_K_K@Z
@@ -3280,6 +3289,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
@@ -3575,6 +3585,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z
@@ -3914,6 +3926,7 @@
     ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
     ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ
     ?RecordEraseSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
+    ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ
     ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QEAAX_K0@Z
     ?RecordInsertMissSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@_K1@Z
     ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QEAAX_K@Z
@@ -4124,6 +4137,7 @@
     ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -4270,6 +4284,7 @@
     ?TrailingZeros@?$NonIterableBitMask@G$0BA@$0A@@container_internal@absl@@QEBAIXZ
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?TryLockImpl@SpinLock@base_internal@absl@@AEAA_NXZ
     ?TryLockInternal@SpinLock@base_internal@absl@@AEAAIII@Z
     ?TryLockSlow@Mutex@absl@@AEAA_NXZ
@@ -4304,6 +4319,7 @@
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UniversalEpoch@absl@@YA?AVTime@1@XZ
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -5278,11 +5294,13 @@
     ?flat@CordRep@cord_internal@absl@@QEAAPEAUCordRepFlat@23@XZ
     ?flat@CordRep@cord_internal@absl@@QEBAPEBUCordRepFlat@23@XZ
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
+    ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEA_KXZ
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
     ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ
     ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?gbswap_16@absl@@YAGG@Z
     ?gbswap_32@absl@@YAII@Z
     ?gbswap_64@absl@@YA_K_K@Z
@@ -5715,6 +5733,7 @@
     ?size@HashtableSize@container_internal@absl@@QEBA_KXZ
     ?size@InlineRep@Cord@absl@@QEBA_KXZ
     ?size@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBA_KXZ
+    ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEAHXZ
     ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXXZ
     ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@XZ
     ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_x64_dbg_cxx23.def b/third_party/abseil-cpp/symbols_x64_dbg_cxx23.def
index 112ec6e..45dc693 100644
--- a/third_party/abseil-cpp/symbols_x64_dbg_cxx23.def
+++ b/third_party/abseil-cpp/symbols_x64_dbg_cxx23.def
@@ -358,6 +358,7 @@
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEB_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@@Z
+    ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PEBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBX@Z
     ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAEAVStringifySink@strings_internal@0@UHex@0@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXV?$Span@QEAUCordRep@cord_internal@absl@@@2@@Z
@@ -590,6 +591,7 @@
     ??$IntegerToString@_J@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_J@Z
     ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBH@Z
+    ??$Invoke@VMixingHashState@hash_internal@absl@@PEBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBQEBX@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@AEBV?$tuple@AEB_K@__Cr@std@@@Z
@@ -1318,6 +1320,7 @@
     ??$call_once@A6AXXZ$$V@absl@@YAXAEAVonce_flag@0@A6AXXZ@Z
     ??$call_once@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@absl@@YAXAEAVonce_flag@0@$$QEAP8FlagImpl@flags_internal@0@EAAXXZ$$QEAPEAV230@@Z
     ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBH@Z
+    ??$combine@PEBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBQEBX@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@Z
     ??$combine@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
@@ -1535,6 +1538,7 @@
     ??$get@$0A@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YAAEBQEAVCommandLineFlag@absl@@AEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@@Z
     ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QEAPEAVCommandLineFlag@absl@@$$QEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z
     ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z
+    ??$hash@PEBX@MixingHashState@hash_internal@absl@@SA_KAEBQEBX@Z
     ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QEBA_KAEBUStringHash@container_internal@2@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
@@ -1544,6 +1548,7 @@
     ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBD_K@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@U?$integer_sequence@_K$0A@$00@45@@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@U?$integer_sequence@_K$0A@@45@@Z
+    ??$hash_with_seed@PEBX$0A@@MixingHashState@hash_internal@absl@@SA_KAEBQEBX_K@Z
     ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z
     ??$hash_with_seed@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@_K@Z
     ??$hash_with_seed@V?$tuple@AEB_K@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEB_K@__Cr@std@@_K@Z
@@ -1655,6 +1660,7 @@
     ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAKH@Z
     ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_JH@Z
     ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEA_KH@Z
+    ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YA_KAEAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z
     ??$swap@PEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@0@Z
     ??$swap@PEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAEAPEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z
     ??$swap@PEAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAEAPEAUTransition@cctz@time_internal@absl@@0@Z
@@ -1983,6 +1989,7 @@
     ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z
     ??0BestHints@flags_internal@absl@@QEAA@E@Z
     ??0BlockingCounter@absl@@QEAA@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z
     ??0BoundConversion@str_format_internal@absl@@QEAA@XZ
     ??0Breakdown@Time@absl@@QEAA@XZ
     ??0BufferRawSink@str_format_internal@absl@@QEAA@PEAD_K@Z
@@ -2298,6 +2305,7 @@
     ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ
     ??1BadStatusOrAccess@absl@@UEAA@XZ
     ??1BestHints@flags_internal@absl@@QEAA@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ
     ??1ByAnyChar@absl@@QEAA@XZ
     ??1CRC32@crc_internal@absl@@UEAA@XZ
     ??1CRC@crc_internal@absl@@UEAA@XZ
@@ -2755,6 +2763,7 @@
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@absl@@@Z@absl@@QEBAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCord@1@@Z
     ??R?$FunctionRef@$$A6A_K_K@Z@absl@@QEBA_K_K@Z
+    ??R?$HashImpl@PEBX@hash_internal@absl@@QEBA_KAEBQEBX@Z
     ??R?$HashImpl@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z
     ??R?$HashImpl@V?$tuple@AEB_K@__Cr@std@@@hash_internal@absl@@QEBA_KAEBV?$tuple@AEB_K@__Cr@std@@@Z
     ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QEBA_K_K@Z
@@ -3277,6 +3286,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
@@ -3572,6 +3582,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z
@@ -3911,6 +3923,7 @@
     ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
     ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ
     ?RecordEraseSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
+    ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ
     ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QEAAX_K0@Z
     ?RecordInsertMissSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@_K1@Z
     ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QEAAX_K@Z
@@ -4121,6 +4134,7 @@
     ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -4267,6 +4281,7 @@
     ?TrailingZeros@?$NonIterableBitMask@G$0BA@$0A@@container_internal@absl@@QEBAIXZ
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?TryLockImpl@SpinLock@base_internal@absl@@AEAA_NXZ
     ?TryLockInternal@SpinLock@base_internal@absl@@AEAAIII@Z
     ?TryLockSlow@Mutex@absl@@AEAA_NXZ
@@ -4301,6 +4316,7 @@
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UniversalEpoch@absl@@YA?AVTime@1@XZ
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -5288,11 +5304,13 @@
     ?flat@CordRep@cord_internal@absl@@QEAAPEAUCordRepFlat@23@XZ
     ?flat@CordRep@cord_internal@absl@@QEBAPEBUCordRepFlat@23@XZ
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
+    ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEA_KXZ
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
     ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ
     ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?gbswap_16@absl@@YAGG@Z
     ?gbswap_32@absl@@YAII@Z
     ?gbswap_64@absl@@YA_K_K@Z
@@ -5725,6 +5743,7 @@
     ?size@HashtableSize@container_internal@absl@@QEBA_KXZ
     ?size@InlineRep@Cord@absl@@QEBA_KXZ
     ?size@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBA_KXZ
+    ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QEBAPEAHXZ
     ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXXZ
     ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@XZ
     ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_x64_rel.def b/third_party/abseil-cpp/symbols_x64_rel.def
index 08848ef..5a54e00 100644
--- a/third_party/abseil-cpp/symbols_x64_rel.def
+++ b/third_party/abseil-cpp/symbols_x64_rel.def
@@ -204,6 +204,7 @@
     ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z
     ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z
     ??0BlockingCounter@absl@@QEAA@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z
     ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??0ByLength@absl@@QEAA@_J@Z
     ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
@@ -259,6 +260,7 @@
     ??0uint128@absl@@QEAA@O@Z
     ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
     ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ
     ??1CRC@crc_internal@absl@@UEAA@XZ
     ??1Cord@absl@@QEAA@XZ
     ??1CordzHandle@cord_internal@absl@@MEAA@XZ
@@ -627,6 +629,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
@@ -790,6 +793,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z
@@ -1122,6 +1127,7 @@
     ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -1216,6 +1222,7 @@
     ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?TryLockSlow@Mutex@absl@@AEAA_NXZ
     ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ
     ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z
@@ -1237,6 +1244,7 @@
     ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -1321,6 +1329,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z
     ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x64_rel_asan.def b/third_party/abseil-cpp/symbols_x64_rel_asan.def
index 923e52c7..0f90e76 100644
--- a/third_party/abseil-cpp/symbols_x64_rel_asan.def
+++ b/third_party/abseil-cpp/symbols_x64_rel_asan.def
@@ -224,6 +224,7 @@
     ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z
     ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z
     ??0BlockingCounter@absl@@QEAA@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z
     ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??0ByLength@absl@@QEAA@_J@Z
     ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
@@ -280,6 +281,7 @@
     ??0uint128@absl@@QEAA@O@Z
     ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
     ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ
     ??1CRC@crc_internal@absl@@UEAA@XZ
     ??1Cord@absl@@QEAA@XZ
     ??1CordzHandle@cord_internal@absl@@MEAA@XZ
@@ -653,6 +655,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
@@ -817,6 +820,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z
@@ -1153,6 +1158,7 @@
     ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -1247,6 +1253,7 @@
     ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?TryLockSlow@Mutex@absl@@AEAA_NXZ
     ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ
     ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z
@@ -1268,6 +1275,7 @@
     ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -1362,6 +1370,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z
     ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x64_rel_asan_cxx23.def b/third_party/abseil-cpp/symbols_x64_rel_asan_cxx23.def
index 27cc0f3..407b3cd 100644
--- a/third_party/abseil-cpp/symbols_x64_rel_asan_cxx23.def
+++ b/third_party/abseil-cpp/symbols_x64_rel_asan_cxx23.def
@@ -224,6 +224,7 @@
     ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z
     ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z
     ??0BlockingCounter@absl@@QEAA@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z
     ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??0ByLength@absl@@QEAA@_J@Z
     ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
@@ -280,6 +281,7 @@
     ??0uint128@absl@@QEAA@O@Z
     ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
     ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ
     ??1CRC@crc_internal@absl@@UEAA@XZ
     ??1Cord@absl@@QEAA@XZ
     ??1CordzHandle@cord_internal@absl@@MEAA@XZ
@@ -653,6 +655,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
@@ -817,6 +820,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z
@@ -1153,6 +1158,7 @@
     ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -1247,6 +1253,7 @@
     ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?TryLockSlow@Mutex@absl@@AEAA_NXZ
     ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ
     ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z
@@ -1268,6 +1275,7 @@
     ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -1362,6 +1370,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z
     ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x64_rel_cxx23.def b/third_party/abseil-cpp/symbols_x64_rel_cxx23.def
index 00bf0ac4..bd51a10 100644
--- a/third_party/abseil-cpp/symbols_x64_rel_cxx23.def
+++ b/third_party/abseil-cpp/symbols_x64_rel_cxx23.def
@@ -204,6 +204,7 @@
     ??0BadStatusOrAccess@absl@@QEAA@AEBV01@@Z
     ??0BadStatusOrAccess@absl@@QEAA@VStatus@1@@Z
     ??0BlockingCounter@absl@@QEAA@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@_K@Z
     ??0ByAnyChar@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??0ByLength@absl@@QEAA@_J@Z
     ??0ByString@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
@@ -259,6 +260,7 @@
     ??0uint128@absl@@QEAA@O@Z
     ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
     ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QEAA@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QEAA@XZ
     ??1CRC@crc_internal@absl@@UEAA@XZ
     ??1Cord@absl@@QEAA@XZ
     ??1CordzHandle@cord_internal@absl@@MEAA@XZ
@@ -627,6 +629,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPEAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QEAAXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByAsciiWhitespace@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
     ?Find@ByChar@absl@@QEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@_K@Z
@@ -790,6 +793,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UEAAXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AEAAXPEAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAX_K@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXPEAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@AEBAXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AEAAXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAUCordRepExternal@12@@Z
@@ -1122,6 +1127,7 @@
     ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPEBDAEBVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -1216,6 +1222,7 @@
     ?TrackCord@CordzInfo@cord_internal@absl@@SAXAEAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z
     ?Trans@Mutex@absl@@AEAAXPEBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAPEAUFixupStackBuffer@123@XZ
     ?TryLockSlow@Mutex@absl@@AEAA_NXZ
     ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPEAVCRCImpl@12@XZ
     ?TryParse@FlagImpl@flags_internal@absl@@AEBA?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z
@@ -1237,6 +1244,7 @@
     ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@_K@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AEAAXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QEAAXXZ
     ?UnlockSlow@Mutex@absl@@AEAAXPEAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -1321,6 +1329,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PEBD0AEANW4chars_format@1@@Z
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z
     ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x86_dbg.def b/third_party/abseil-cpp/symbols_x86_dbg.def
index 785d89a..7f9bff8 100644
--- a/third_party/abseil-cpp/symbols_x86_dbg.def
+++ b/third_party/abseil-cpp/symbols_x86_dbg.def
@@ -358,6 +358,7 @@
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@ABI@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABI@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z
+    ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PBX@Z
     ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAAVStringifySink@strings_internal@0@UHex@0@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AAEXPAUCordRep@12@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AAEXV?$Span@QAUCordRep@cord_internal@absl@@@2@@Z
@@ -590,6 +591,7 @@
     ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABH@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@I@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABI@Z
+    ??$Invoke@VMixingHashState@hash_internal@absl@@PBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABQBX@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@ABI@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$tuple@ABI@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z
@@ -1312,6 +1314,7 @@
     ??$call_once@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@@absl@@YAXAAVonce_flag@0@$$QAP8FlagImpl@flags_internal@0@AEXXZ$$QAPAV230@@Z
     ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABH@Z
     ??$combine@I$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABI@Z
+    ??$combine@PBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABQBX@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@Z
     ??$combine@V?$tuple@ABI@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$tuple@ABI@__Cr@std@@@Z
@@ -1528,6 +1531,7 @@
     ??$get@$0A@ABQAVCommandLineFlag@absl@@@__Cr@std@@YAABQAVCommandLineFlag@absl@@AAV?$tuple@ABQAVCommandLineFlag@absl@@@01@@Z
     ??$get@$0A@PAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QAPAVCommandLineFlag@absl@@$$QAV?$tuple@PAVCommandLineFlag@absl@@_N@01@@Z
     ??$get@$0A@PAVCommandLineFlag@absl@@_N@__Cr@std@@YAAAPAVCommandLineFlag@absl@@AAV?$tuple@PAVCommandLineFlag@absl@@_N@01@@Z
+    ??$hash@PBX@MixingHashState@hash_internal@absl@@SAIABQBX@Z
     ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QBEIABU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z
     ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QBEIABUStringHash@container_internal@2@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z
     ??$hash@V?$tuple@ABI@__Cr@std@@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABI@__Cr@std@@@Z
@@ -1537,6 +1541,7 @@
     ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PBDI@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@ABI@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABI@__Cr@std@@U?$integer_sequence@I$0A@@45@@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@U?$integer_sequence@I$0A@$00@45@@Z
+    ??$hash_with_seed@PBX$0A@@MixingHashState@hash_internal@absl@@SAIABQBXI@Z
     ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z
     ??$hash_with_seed@V?$tuple@ABI@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABI@__Cr@std@@I@Z
     ??$hash_with_seed@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@I@Z
@@ -1640,6 +1645,7 @@
     ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAKH@Z
     ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PA_JH@Z
     ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PA_KH@Z
+    ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YAIAAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z
     ??$swap@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@0@Z
     ??$swap@PAPAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAAPAPAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z
     ??$swap@PAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAAPAUTransition@cctz@time_internal@absl@@0@Z
@@ -1968,6 +1974,7 @@
     ??0BadStatusOrAccess@absl@@QAE@VStatus@1@@Z
     ??0BestHints@flags_internal@absl@@QAE@E@Z
     ??0BlockingCounter@absl@@QAE@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@I@Z
     ??0BoundConversion@str_format_internal@absl@@QAE@XZ
     ??0Breakdown@Time@absl@@QAE@XZ
     ??0BufferRawSink@str_format_internal@absl@@QAE@PADI@Z
@@ -2283,6 +2290,7 @@
     ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAE@XZ
     ??1BadStatusOrAccess@absl@@UAE@XZ
     ??1BestHints@flags_internal@absl@@QAE@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@XZ
     ??1ByAnyChar@absl@@QAE@XZ
     ??1CRC32@crc_internal@absl@@UAE@XZ
     ??1CRC@crc_internal@absl@@UAE@XZ
@@ -2756,6 +2764,7 @@
     ??R?$FunctionRef@$$A6AXV?$Span@I@absl@@@Z@absl@@QBEXV?$Span@I@1@@Z
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QBEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@absl@@@Z@absl@@QBEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@1@@Z
+    ??R?$HashImpl@PBX@hash_internal@absl@@QBEIABQBX@Z
     ??R?$HashImpl@V?$tuple@ABI@__Cr@std@@@hash_internal@absl@@QBEIABV?$tuple@ABI@__Cr@std@@@Z
     ??R?$HashImpl@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@hash_internal@absl@@QBEIABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z
     ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QBEII@Z
@@ -3278,6 +3287,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QAEXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
     ?Find@ByAsciiWhitespace@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
     ?Find@ByChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
@@ -3573,6 +3583,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UAEXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AAEXPAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXI@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXPAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@ABEXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AAEXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAUCordRepExternal@12@@Z
@@ -3912,6 +3924,7 @@
     ?RecordClearedReservationSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z
     ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QAEXXZ
     ?RecordEraseSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z
+    ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QAEXXZ
     ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QAEXII@Z
     ?RecordInsertMissSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@II@Z
     ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QAEXI@Z
@@ -4122,6 +4135,7 @@
     ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPBDABVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -4268,6 +4282,7 @@
     ?TrailingZeros@?$NonIterableBitMask@G$0BA@$0A@@container_internal@absl@@QBEIXZ
     ?Trans@Mutex@absl@@AAEXPBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ
     ?TryLockImpl@SpinLock@base_internal@absl@@AAE_NXZ
     ?TryLockInternal@SpinLock@base_internal@absl@@AAEIII@Z
     ?TryLockSlow@Mutex@absl@@AAE_NXZ
@@ -4302,6 +4317,7 @@
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UniversalEpoch@absl@@YA?AVTime@1@XZ
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QAEXXZ
     ?UnlockSlow@Mutex@absl@@AAEXPAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -5276,11 +5292,13 @@
     ?flat@CordRep@cord_internal@absl@@QAEPAUCordRepFlat@23@XZ
     ?flat@CordRep@cord_internal@absl@@QBEPBUCordRepFlat@23@XZ
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABV567@ABV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@ABV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@ABVtime_zone@234@@Z
+    ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QBEPAIXZ
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AANW4chars_format@1@@Z
     ?front@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QAEAAPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?front@?$__split_buffer@PAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QAEAAPAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ
     ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAUTransition@cctz@time_internal@absl@@XZ
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?gbswap_16@absl@@YAGG@Z
     ?gbswap_32@absl@@YAII@Z
     ?gbswap_64@absl@@YA_K_K@Z
@@ -5713,6 +5731,7 @@
     ?size@HashtableSize@container_internal@absl@@QBEIXZ
     ?size@InlineRep@Cord@absl@@QBEIXZ
     ?size@Storage@?$FixedArray@D$0PPPPPPPP@V?$allocator@D@__Cr@std@@@absl@@QBEIXZ
+    ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QBEPAHXZ
     ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAEXXZ
     ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@ABEPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@XZ
     ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@ABEPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_x86_dbg_cxx23.def b/third_party/abseil-cpp/symbols_x86_dbg_cxx23.def
index fb5ef631..8422188b 100644
--- a/third_party/abseil-cpp/symbols_x86_dbg_cxx23.def
+++ b/third_party/abseil-cpp/symbols_x86_dbg_cxx23.def
@@ -358,6 +358,7 @@
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@ABI@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABI@__Cr@std@@@Z
     ??$AbslHashValue@VMixingHashState@hash_internal@absl@@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z
+    ??$AbslHashValue@VMixingHashState@hash_internal@absl@@PBX@hash_internal@absl@@YA?AVMixingHashState@01@V201@PBX@Z
     ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAAVStringifySink@strings_internal@0@UHex@0@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AAEXPAUCordRep@12@@Z
     ??$Add@$00@CordRepBtree@cord_internal@absl@@AAEXV?$Span@QAUCordRep@cord_internal@absl@@@2@@Z
@@ -590,6 +591,7 @@
     ??$IntegerToString@_K@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@H@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABH@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@I@UniquelyRepresentedProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABI@Z
+    ??$Invoke@VMixingHashState@hash_internal@absl@@PBX@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABQBX@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@ABI@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$tuple@ABI@__Cr@std@@@Z
     ??$Invoke@VMixingHashState@hash_internal@absl@@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@HashValueProbe@HashSelect@hash_internal@absl@@SA?AVMixingHashState@23@V423@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z
@@ -1317,6 +1319,7 @@
     ??$call_once@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@@absl@@YAXAAVonce_flag@0@$$QAP8FlagImpl@flags_internal@0@AEXXZ$$QAPAV230@@Z
     ??$combine@H$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABH@Z
     ??$combine@I$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABI@Z
+    ??$combine@PBX$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABQBX@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@Z
     ??$combine@V?$tuple@ABI@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$tuple@ABI@__Cr@std@@@Z
@@ -1533,6 +1536,7 @@
     ??$get@$0A@ABQAVCommandLineFlag@absl@@@__Cr@std@@YAABQAVCommandLineFlag@absl@@AAV?$tuple@ABQAVCommandLineFlag@absl@@@01@@Z
     ??$get@$0A@PAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QAPAVCommandLineFlag@absl@@$$QAV?$tuple@PAVCommandLineFlag@absl@@_N@01@@Z
     ??$get@$0A@PAVCommandLineFlag@absl@@_N@__Cr@std@@YAAAPAVCommandLineFlag@absl@@AAV?$tuple@PAVCommandLineFlag@absl@@_N@01@@Z
+    ??$hash@PBX@MixingHashState@hash_internal@absl@@SAIABQBX@Z
     ??$hash@U?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@hash_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QBEIABU?$Hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z
     ??$hash@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@HashWithSeed@hash_internal@absl@@QBEIABUStringHash@container_internal@2@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z
     ??$hash@V?$tuple@ABI@__Cr@std@@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABI@__Cr@std@@@Z
@@ -1542,6 +1546,7 @@
     ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PBDI@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@ABI@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABI@__Cr@std@@U?$integer_sequence@I$0A@@45@@Z
     ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@U?$integer_sequence@I$0A@$00@45@@Z
+    ??$hash_with_seed@PBX$0A@@MixingHashState@hash_internal@absl@@SAIABQBXI@Z
     ??$hash_with_seed@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z
     ??$hash_with_seed@V?$tuple@ABI@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABI@__Cr@std@@I@Z
     ??$hash_with_seed@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@I@Z
@@ -1653,6 +1658,7 @@
     ??$safe_strtoi_base@K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAKH@Z
     ??$safe_strtoi_base@_J@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PA_JH@Z
     ??$safe_strtoi_base@_K@numbers_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PA_KH@Z
+    ??$size@UFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@$0EA@@__Cr@std@@YAIAAY0EA@$$CBUFixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@@Z
     ??$swap@PAPAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@YAXAAPAPAPBVImpl@time_zone@cctz@time_internal@absl@@0@Z
     ??$swap@PAPAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXAAPAPAUPrefixCrc@CrcCordState@crc_internal@absl@@0@Z
     ??$swap@PAUTransition@cctz@time_internal@absl@@@__Cr@std@@YAXAAPAUTransition@cctz@time_internal@absl@@0@Z
@@ -1981,6 +1987,7 @@
     ??0BadStatusOrAccess@absl@@QAE@VStatus@1@@Z
     ??0BestHints@flags_internal@absl@@QAE@E@Z
     ??0BlockingCounter@absl@@QAE@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@I@Z
     ??0BoundConversion@str_format_internal@absl@@QAE@XZ
     ??0Breakdown@Time@absl@@QAE@XZ
     ??0BufferRawSink@str_format_internal@absl@@QAE@PADI@Z
@@ -2296,6 +2303,7 @@
     ??1?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAE@XZ
     ??1BadStatusOrAccess@absl@@UAE@XZ
     ??1BestHints@flags_internal@absl@@QAE@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@XZ
     ??1ByAnyChar@absl@@QAE@XZ
     ??1CRC32@crc_internal@absl@@UAE@XZ
     ??1CRC@crc_internal@absl@@UAE@XZ
@@ -2753,6 +2761,7 @@
     ??R?$FunctionRef@$$A6AXV?$Span@I@absl@@@Z@absl@@QBEXV?$Span@I@1@@Z
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z@absl@@QBEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??R?$FunctionRef@$$A6AXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@absl@@@Z@absl@@QBEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCord@1@@Z
+    ??R?$HashImpl@PBX@hash_internal@absl@@QBEIABQBX@Z
     ??R?$HashImpl@V?$tuple@ABI@__Cr@std@@@hash_internal@absl@@QBEIABV?$tuple@ABI@__Cr@std@@@Z
     ??R?$HashImpl@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@hash_internal@absl@@QBEIABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z
     ??R?$HashKey@UStringHash@container_internal@absl@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$00@container_internal@absl@@QBEII@Z
@@ -3275,6 +3284,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QAEXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
     ?Find@ByAsciiWhitespace@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
     ?Find@ByChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
@@ -3570,6 +3580,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UAEXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AAEXPAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXI@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXPAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@ABEXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AAEXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAUCordRepExternal@12@@Z
@@ -3909,6 +3921,7 @@
     ?RecordClearedReservationSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z
     ?RecordErase@HashtablezInfoHandle@container_internal@absl@@QAEXXZ
     ?RecordEraseSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z
+    ?RecordInsertHit@HashtablezInfoHandle@container_internal@absl@@QAEXXZ
     ?RecordInsertMiss@HashtablezInfoHandle@container_internal@absl@@QAEXII@Z
     ?RecordInsertMissSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@II@Z
     ?RecordRehash@HashtablezInfoHandle@container_internal@absl@@QAEXI@Z
@@ -4119,6 +4132,7 @@
     ?StartsWith@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPBDABVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -4265,6 +4279,7 @@
     ?TrailingZeros@?$NonIterableBitMask@G$0BA@$0A@@container_internal@absl@@QBEIXZ
     ?Trans@Mutex@absl@@AAEXPBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ
     ?TryLockImpl@SpinLock@base_internal@absl@@AAE_NXZ
     ?TryLockInternal@SpinLock@base_internal@absl@@AAEIII@Z
     ?TryLockSlow@Mutex@absl@@AAE_NXZ
@@ -4299,6 +4314,7 @@
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UniversalEpoch@absl@@YA?AVTime@1@XZ
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QAEXXZ
     ?UnlockSlow@Mutex@absl@@AAEXPAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -5286,11 +5302,13 @@
     ?flat@CordRep@cord_internal@absl@@QAEPAUCordRepFlat@23@XZ
     ?flat@CordRep@cord_internal@absl@@QBEPBUCordRepFlat@23@XZ
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABV567@ABV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@ABV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@ABVtime_zone@234@@Z
+    ?frames@BorrowedFixupBuffer@internal_stacktrace@absl@@QBEPAIXZ
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AANW4chars_format@1@@Z
     ?front@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QAEAAPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ
     ?front@?$__split_buffer@PAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QAEAAPAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ
     ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAUTransition@cctz@time_internal@absl@@XZ
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?gbswap_16@absl@@YAGG@Z
     ?gbswap_32@absl@@YAII@Z
     ?gbswap_64@absl@@YA_K_K@Z
@@ -5723,6 +5741,7 @@
     ?size@HashtableSize@container_internal@absl@@QBEIXZ
     ?size@InlineRep@Cord@absl@@QBEIXZ
     ?size@Storage@?$FixedArray@D$0PPPPPPPP@V?$allocator@D@__Cr@std@@@absl@@QBEIXZ
+    ?sizes@BorrowedFixupBuffer@internal_stacktrace@absl@@QBEPAHXZ
     ?skip_empty_or_deleted@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAEXXZ
     ?slot@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@ABEPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@XZ
     ?slot_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@ABEPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@23@XZ
diff --git a/third_party/abseil-cpp/symbols_x86_rel.def b/third_party/abseil-cpp/symbols_x86_rel.def
index ded7505..f3acc37 100644
--- a/third_party/abseil-cpp/symbols_x86_rel.def
+++ b/third_party/abseil-cpp/symbols_x86_rel.def
@@ -207,6 +207,7 @@
     ??0BadStatusOrAccess@absl@@QAE@ABV01@@Z
     ??0BadStatusOrAccess@absl@@QAE@VStatus@1@@Z
     ??0BlockingCounter@absl@@QAE@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@I@Z
     ??0ByAnyChar@absl@@QAE@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??0ByLength@absl@@QAE@H@Z
     ??0ByString@absl@@QAE@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
@@ -262,6 +263,7 @@
     ??0uint128@absl@@QAE@O@Z
     ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ
     ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@XZ
     ??1CRC@crc_internal@absl@@UAE@XZ
     ??1Cord@absl@@QAE@XZ
     ??1CordzHandle@cord_internal@absl@@MAE@XZ
@@ -627,6 +629,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QAEXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
     ?Find@ByAsciiWhitespace@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
     ?Find@ByChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
@@ -790,6 +793,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UAEXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AAEXPAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXI@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXPAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@ABEXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AAEXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAUCordRepExternal@12@@Z
@@ -1124,6 +1129,7 @@
     ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPBDABVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -1218,6 +1224,7 @@
     ?TrackCord@CordzInfo@cord_internal@absl@@SAXAAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z
     ?Trans@Mutex@absl@@AAEXPBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ
     ?TryLockSlow@Mutex@absl@@AAE_NXZ
     ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPAVCRCImpl@12@XZ
     ?TryParse@FlagImpl@flags_internal@absl@@ABE?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z
@@ -1239,6 +1246,7 @@
     ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@I@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QAEXXZ
     ?UnlockSlow@Mutex@absl@@AAEXPAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -1323,6 +1331,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABV567@ABV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@ABV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@ABVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AANW4chars_format@1@@Z
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@ABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z
     ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/abseil-cpp/symbols_x86_rel_cxx23.def b/third_party/abseil-cpp/symbols_x86_rel_cxx23.def
index d739e5d..bdb1375 100644
--- a/third_party/abseil-cpp/symbols_x86_rel_cxx23.def
+++ b/third_party/abseil-cpp/symbols_x86_rel_cxx23.def
@@ -207,6 +207,7 @@
     ??0BadStatusOrAccess@absl@@QAE@ABV01@@Z
     ??0BadStatusOrAccess@absl@@QAE@VStatus@1@@Z
     ??0BlockingCounter@absl@@QAE@H@Z
+    ??0BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@I@Z
     ??0ByAnyChar@absl@@QAE@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ??0ByLength@absl@@QAE@H@Z
     ??0ByString@absl@@QAE@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
@@ -262,6 +263,7 @@
     ??0uint128@absl@@QAE@O@Z
     ??1?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ
     ??1?$unique_ptr@ULogMessageData@LogMessage@log_internal@absl@@U?$default_delete@ULogMessageData@LogMessage@log_internal@absl@@@__Cr@std@@@__Cr@std@@QAE@XZ
+    ??1BorrowedFixupBuffer@internal_stacktrace@absl@@QAE@XZ
     ??1CRC@crc_internal@absl@@UAE@XZ
     ??1Cord@absl@@QAE@XZ
     ??1CordzHandle@cord_internal@absl@@MAE@XZ
@@ -627,6 +629,7 @@
     ?FillZeroesTable@CRCImpl@crc_internal@absl@@SAHIPAY0BAA@I@Z
     ?FinalizeEncodingAndFormat@LogMessageData@LogMessage@log_internal@absl@@QAEXXZ
     ?FinalizeRegistry@flags_internal@absl@@YAXXZ
+    ?Find@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ
     ?Find@ByAnyChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
     ?Find@ByAsciiWhitespace@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
     ?Find@ByChar@absl@@QBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@I@Z
@@ -790,6 +793,8 @@
     ?InitSigSafeArena@base_internal@absl@@YAXXZ
     ?InitTables@CRC32@crc_internal@absl@@UAEXXZ
     ?InitTree@ChunkIterator@Cord@absl@@AAEXPAUCordRep@cord_internal@3@@Z
+    ?InitViaAllocation@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXI@Z
+    ?InitViaBorrow@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXPAUFixupStackBuffer@123@@Z
     ?InitWhat@BadStatusOrAccess@absl@@ABEXXZ
     ?Initialize@ExponentialBiased@profiling_internal@absl@@AAEXXZ
     ?InitializeCordRepExternal@cord_internal@absl@@YAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAUCordRepExternal@12@@Z
@@ -1124,6 +1129,7 @@
     ?StackTraceWorksForTest@debugging_internal@absl@@YA_NXZ
     ?StartsWithIgnoreCase@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z
     ?StatusCodeToString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@W4StatusCode@1@@Z
+    ?StatusCodeToStringView@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4StatusCode@1@@Z
     ?StatusMessageAsCStr@absl@@YAPBDABVStatus@1@@Z
     ?StderrThreshold@absl@@YA?AW4LogSeverityAtLeast@1@XZ
     ?SteadyClockNow@KernelTimeout@synchronization_internal@absl@@CA_JXZ
@@ -1218,6 +1224,7 @@
     ?TrackCord@CordzInfo@cord_internal@absl@@SAXAAVInlineData@23@W4MethodIdentifier@CordzUpdateTracker@23@_J@Z
     ?Trans@Mutex@absl@@AAEXPBUMuHowS@2@@Z
     ?Trunc@absl@@YA?AVDuration@1@V21@0@Z
+    ?TryLock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEPAUFixupStackBuffer@123@XZ
     ?TryLockSlow@Mutex@absl@@AAE_NXZ
     ?TryNewCRC32AcceleratedX86ARMCombined@crc_internal@absl@@YAPAVCRCImpl@12@XZ
     ?TryParse@FlagImpl@flags_internal@absl@@ABE?AV?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z
@@ -1239,6 +1246,7 @@
     ?UnextendCrc32cByZeroes@crc_internal@absl@@YA?AVcrc32c_t@2@V32@I@Z
     ?UnimplementedError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
     ?UnknownError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z
+    ?Unlock@BorrowedFixupBuffer@internal_stacktrace@absl@@AAEXXZ
     ?Unlock@CordzInfo@cord_internal@absl@@QAEXXZ
     ?UnlockSlow@Mutex@absl@@AAEXPAUSynchWaitParams@2@@Z
     ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@F@Z
@@ -1323,6 +1331,7 @@
     ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABV567@ABV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@ABV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@ABVtime_zone@234@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AAMW4chars_format@1@@Z
     ?from_chars@absl@@YA?AUfrom_chars_result@1@PBD0AANW4chars_format@1@@Z
+    ?g_instances@FixupStackBuffer@BorrowedFixupBuffer@internal_stacktrace@absl@@2PAU1234@A
     ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ
     ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@ABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z
     ?kDefaultIterControl@container_internal@absl@@3W4ctrl_t@12@A
diff --git a/third_party/androidx/build.gradle b/third_party/androidx/build.gradle
index 4d2b868..fbc6f013 100644
--- a/third_party/androidx/build.gradle
+++ b/third_party/androidx/build.gradle
@@ -314,7 +314,7 @@
     google()
     maven {
         // This URL is generated by the fetch_all_androidx.py script.
-        url 'https://androidx.dev/snapshots/builds/14447890/artifacts/repository'
+        url 'https://androidx.dev/snapshots/builds/14455269/artifacts/repository'
     }
     mavenCentral()
 }
diff --git a/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium b/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium
index 119adf5..a729e92 100644
--- a/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium
@@ -1,6 +1,6 @@
 Name: Activity
 Short Name: activity
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/activity/activity/1.13.0-SNAPSHOT/activity-1.13.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/activity/activity/1.13.0-SNAPSHOT/activity-1.13.0-20251118.131355-1.aar
 Version: 1.13.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium b/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium
index b362303..8142266a 100644
--- a/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium
@@ -1,6 +1,6 @@
 Name: Activity Compose
 Short Name: activity-compose
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/activity/activity-compose/1.13.0-SNAPSHOT/activity-compose-1.13.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/activity/activity-compose/1.13.0-SNAPSHOT/activity-compose-1.13.0-20251118.131355-1.aar
 Version: 1.13.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium
index e7bc7e0e..d4f1b942 100644
--- a/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium
@@ -1,6 +1,6 @@
 Name: Activity Kotlin Extensions
 Short Name: activity-ktx
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/activity/activity-ktx/1.13.0-SNAPSHOT/activity-ktx-1.13.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/activity/activity-ktx/1.13.0-SNAPSHOT/activity-ktx-1.13.0-20251118.131355-1.aar
 Version: 1.13.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium b/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium
index c0c837c..91d5d34b 100644
--- a/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium
@@ -1,6 +1,6 @@
 Name: Experimental annotation
 Short Name: annotation-experimental
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/annotation/annotation-experimental/1.6.0-SNAPSHOT/annotation-experimental-1.6.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/annotation/annotation-experimental/1.6.0-SNAPSHOT/annotation-experimental-1.6.0-20251118.131355-1.aar
 Version: 1.6.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium
index 015a28a7..198beee 100644
--- a/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium
@@ -1,6 +1,6 @@
 Name: Annotation
 Short Name: annotation-jvm
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/annotation/annotation-jvm/1.10.0-SNAPSHOT/annotation-jvm-1.10.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/annotation/annotation-jvm/1.10.0-SNAPSHOT/annotation-jvm-1.10.0-20251118.131355-1.jar
 Version: 1.10.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium b/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium
index cdeb461..94eb333 100644
--- a/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium
@@ -1,6 +1,6 @@
 Name: AppCompat
 Short Name: appcompat
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/appcompat/appcompat/1.8.0-SNAPSHOT/appcompat-1.8.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/appcompat/appcompat/1.8.0-SNAPSHOT/appcompat-1.8.0-20251118.131355-1.aar
 Version: 1.8.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium b/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium
index 4c7126b9..e12c163 100644
--- a/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium
@@ -1,6 +1,6 @@
 Name: AppCompat Resources
 Short Name: appcompat-resources
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/appcompat/appcompat-resources/1.8.0-SNAPSHOT/appcompat-resources-1.8.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/appcompat/appcompat-resources/1.8.0-SNAPSHOT/appcompat-resources-1.8.0-20251118.131355-1.aar
 Version: 1.8.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium b/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium
index fa08f8d..0620b84 100644
--- a/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium
@@ -1,6 +1,6 @@
 Name: AppSearch
 Short Name: appsearch
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/appsearch/appsearch/1.2.0-SNAPSHOT/appsearch-1.2.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/appsearch/appsearch/1.2.0-SNAPSHOT/appsearch-1.2.0-20251118.131355-1.aar
 Version: 1.2.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium
index f9fe4a2..d79dfb64 100644
--- a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium
@@ -1,6 +1,6 @@
 Name: AppSearch Builtin Types
 Short Name: appsearch-builtin-types
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/appsearch/appsearch-builtin-types/1.2.0-SNAPSHOT/appsearch-builtin-types-1.2.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/appsearch/appsearch-builtin-types/1.2.0-SNAPSHOT/appsearch-builtin-types-1.2.0-20251118.131355-1.aar
 Version: 1.2.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium
index 76f6bba4..7681fab 100644
--- a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium
@@ -1,6 +1,6 @@
 Name: AppSearch Platform Storage
 Short Name: appsearch-platform-storage
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/appsearch/appsearch-platform-storage/1.2.0-SNAPSHOT/appsearch-platform-storage-1.2.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/appsearch/appsearch-platform-storage/1.2.0-SNAPSHOT/appsearch-platform-storage-1.2.0-20251118.131355-1.aar
 Version: 1.2.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium b/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium
index 17773a3e..4803926 100644
--- a/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium
@@ -1,6 +1,6 @@
 Name: Arch-Common
 Short Name: core-common
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/arch/core/core-common/2.3.0-SNAPSHOT/core-common-2.3.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/arch/core/core-common/2.3.0-SNAPSHOT/core-common-2.3.0-20251118.131355-1.jar
 Version: 2.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium b/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium
index b73cc7c..deb58b7 100644
--- a/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium
@@ -1,6 +1,6 @@
 Name: Arch-Runtime
 Short Name: core-runtime
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/arch/core/core-runtime/2.3.0-SNAPSHOT/core-runtime-2.3.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/arch/core/core-runtime/2.3.0-SNAPSHOT/core-runtime-2.3.0-20251118.131355-1.aar
 Version: 2.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium b/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium
index 87a77c5..c163680 100644
--- a/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium
@@ -1,6 +1,6 @@
 Name: Autofill
 Short Name: autofill
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/autofill/autofill/1.4.0-SNAPSHOT/autofill-1.4.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/autofill/autofill/1.4.0-SNAPSHOT/autofill-1.4.0-20251118.131355-1.aar
 Version: 1.4.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium
index b3cb8f6..76751d0 100644
--- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium
@@ -1,6 +1,6 @@
 Name: Benchmark - Common
 Short Name: benchmark-common
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/benchmark/benchmark-common/1.5.0-SNAPSHOT/benchmark-common-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/benchmark/benchmark-common/1.5.0-SNAPSHOT/benchmark-common-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium
index 09fc9098..21fa0683 100644
--- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium
@@ -1,6 +1,6 @@
 Name: Benchmark - JUnit4
 Short Name: benchmark-junit4
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/benchmark/benchmark-junit4/1.5.0-SNAPSHOT/benchmark-junit4-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/benchmark/benchmark-junit4/1.5.0-SNAPSHOT/benchmark-junit4-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium
index eaac19bf..c8da57ca 100644
--- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium
@@ -1,6 +1,6 @@
 Name: Benchmark - Macrobenchmark
 Short Name: benchmark-macro
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/benchmark/benchmark-macro/1.5.0-SNAPSHOT/benchmark-macro-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/benchmark/benchmark-macro/1.5.0-SNAPSHOT/benchmark-macro-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium
index eb7480f..847a7d6 100644
--- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium
@@ -1,6 +1,6 @@
 Name: Benchmark - Macrobenchmark JUnit4
 Short Name: benchmark-macro-junit4
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/benchmark/benchmark-macro-junit4/1.5.0-SNAPSHOT/benchmark-macro-junit4-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/benchmark/benchmark-macro-junit4/1.5.0-SNAPSHOT/benchmark-macro-junit4-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium
index 9e0400b8..2c619a92 100644
--- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Benchmark TraceProcessor
 Short Name: benchmark-traceprocessor-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/benchmark/benchmark-traceprocessor-android/1.5.0-SNAPSHOT/benchmark-traceprocessor-android-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/benchmark/benchmark-traceprocessor-android/1.5.0-SNAPSHOT/benchmark-traceprocessor-android-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium b/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium
index 64146dd..25892392f 100644
--- a/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium
@@ -1,6 +1,6 @@
 Name: Biometric
 Short Name: biometric
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/biometric/biometric/1.4.0-SNAPSHOT/biometric-1.4.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/biometric/biometric/1.4.0-SNAPSHOT/biometric-1.4.0-20251118.131355-1.aar
 Version: 1.4.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium b/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium
index 5480b4c..43319f9 100644
--- a/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium
@@ -1,6 +1,6 @@
 Name: Browser
 Short Name: browser
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/browser/browser/1.10.0-SNAPSHOT/browser-1.10.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/browser/browser/1.10.0-SNAPSHOT/browser-1.10.0-20251118.131355-1.aar
 Version: 1.10.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium b/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium
index 5f93048..58d83cac 100644
--- a/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium
@@ -1,6 +1,6 @@
 Name: CardView
 Short Name: cardview
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/cardview/cardview/1.1.0-SNAPSHOT/cardview-1.1.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/cardview/cardview/1.1.0-SNAPSHOT/cardview-1.1.0-20251118.131355-1.aar
 Version: 1.1.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium
index 46e2ffb..d9ef6bb 100644
--- a/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium
@@ -1,6 +1,6 @@
 Name: collections
 Short Name: collection-jvm
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/collection/collection-jvm/1.6.0-SNAPSHOT/collection-jvm-1.6.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/collection/collection-jvm/1.6.0-SNAPSHOT/collection-jvm-1.6.0-20251118.131355-1.jar
 Version: 1.6.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium
index c540532..4e645deba 100644
--- a/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium
@@ -1,6 +1,6 @@
 Name: Collections Kotlin Extensions
 Short Name: collection-ktx
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/collection/collection-ktx/1.6.0-SNAPSHOT/collection-ktx-1.6.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/collection/collection-ktx/1.6.0-SNAPSHOT/collection-ktx-1.6.0-20251118.131355-1.jar
 Version: 1.6.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium
index 1b9f998..6577b11b 100644
--- a/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Animation
 Short Name: animation-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/animation/animation-android/1.11.0-SNAPSHOT/animation-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/animation/animation-android/1.11.0-SNAPSHOT/animation-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium
index 09fc13b..4a6b70750 100644
--- a/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Animation Core
 Short Name: animation-core-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/animation/animation-core-android/1.11.0-SNAPSHOT/animation-core-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/animation/animation-core-android/1.11.0-SNAPSHOT/animation-core-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium
index c79b9e2e..a4e390d 100644
--- a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Foundation
 Short Name: foundation-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/foundation/foundation-android/1.11.0-SNAPSHOT/foundation-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/foundation/foundation-android/1.11.0-SNAPSHOT/foundation-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium
index b37c106..4a973b1 100644
--- a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Layouts
 Short Name: foundation-layout-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/foundation/foundation-layout-android/1.11.0-SNAPSHOT/foundation-layout-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/foundation/foundation-layout-android/1.11.0-SNAPSHOT/foundation-layout-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium
index 7cb53dc..2d3f6a5 100644
--- a/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Material3 Components
 Short Name: material3-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/material3/material3-android/1.5.0-SNAPSHOT/material3-android-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/material3/material3-android/1.5.0-SNAPSHOT/material3-android-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium
index b69dcc6..d89aff8 100644
--- a/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Material Ripple
 Short Name: material-ripple-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/material/material-ripple-android/1.11.0-SNAPSHOT/material-ripple-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/material/material-ripple-android/1.11.0-SNAPSHOT/material-ripple-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium
index 0d9cdbe..da5457d 100644
--- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Runtime
 Short Name: runtime-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/runtime/runtime-android/1.11.0-SNAPSHOT/runtime-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/runtime/runtime-android/1.11.0-SNAPSHOT/runtime-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium
index e0cb7bba..8a0f8b3 100644
--- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Runtime Annotation
 Short Name: runtime-annotation-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/runtime/runtime-annotation-android/1.11.0-SNAPSHOT/runtime-annotation-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/runtime/runtime-annotation-android/1.11.0-SNAPSHOT/runtime-annotation-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium
index 0ecaf7fb..7bc60d9 100644
--- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Runtime Retain
 Short Name: runtime-retain-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/runtime/runtime-retain-android/1.11.0-SNAPSHOT/runtime-retain-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/runtime/runtime-retain-android/1.11.0-SNAPSHOT/runtime-retain-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium
index cb3d055..70d4d1b 100644
--- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Saveable
 Short Name: runtime-saveable-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/runtime/runtime-saveable-android/1.11.0-SNAPSHOT/runtime-saveable-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/runtime/runtime-saveable-android/1.11.0-SNAPSHOT/runtime-saveable-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium
index 7a3477a..acae5f1 100644
--- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose UI
 Short Name: ui-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-android/1.11.0-SNAPSHOT/ui-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-android/1.11.0-SNAPSHOT/ui-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium
index 35f2c23..091094c 100644
--- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Geometry
 Short Name: ui-geometry-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-geometry-android/1.11.0-SNAPSHOT/ui-geometry-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-geometry-android/1.11.0-SNAPSHOT/ui-geometry-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium
index 9f263f721..0ce2be1 100644
--- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Graphics
 Short Name: ui-graphics-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-graphics-android/1.11.0-SNAPSHOT/ui-graphics-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-graphics-android/1.11.0-SNAPSHOT/ui-graphics-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium
index 00685b4..c763a20 100644
--- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Testing
 Short Name: ui-test-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-test-android/1.11.0-SNAPSHOT/ui-test-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-test-android/1.11.0-SNAPSHOT/ui-test-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium
index 49b097a7..dbe76f9 100644
--- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Testing for JUnit4
 Short Name: ui-test-junit4-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-test-junit4-android/1.11.0-SNAPSHOT/ui-test-junit4-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-test-junit4-android/1.11.0-SNAPSHOT/ui-test-junit4-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium
index b4bbd26f..05834ba 100644
--- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Testing manifest dependency
 Short Name: ui-test-manifest
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-test-manifest/1.11.0-SNAPSHOT/ui-test-manifest-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-test-manifest/1.11.0-SNAPSHOT/ui-test-manifest-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium
index 722d714..1315b7b 100644
--- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose UI Text
 Short Name: ui-text-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-text-android/1.11.0-SNAPSHOT/ui-text-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-text-android/1.11.0-SNAPSHOT/ui-text-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium
index ef05c70..96c87ec 100644
--- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Google Fonts integration
 Short Name: ui-text-google-fonts
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-text-google-fonts/1.11.0-SNAPSHOT/ui-text-google-fonts-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-text-google-fonts/1.11.0-SNAPSHOT/ui-text-google-fonts-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium
index 109648f..755381f 100644
--- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Unit
 Short Name: ui-unit-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-unit-android/1.11.0-SNAPSHOT/ui-unit-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-unit-android/1.11.0-SNAPSHOT/ui-unit-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium
index 04fa730..e101b4c 100644
--- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Util
 Short Name: ui-util-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/compose/ui/ui-util-android/1.11.0-SNAPSHOT/ui-util-android-1.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/compose/ui/ui-util-android/1.11.0-SNAPSHOT/ui-util-android-1.11.0-20251118.131355-1.aar
 Version: 1.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium
index eb4f96c..ba04378b 100644
--- a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium
@@ -1,6 +1,6 @@
 Name: ConstraintLayout
 Short Name: constraintlayout
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/constraintlayout/constraintlayout/2.3.0-SNAPSHOT/constraintlayout-2.3.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/constraintlayout/constraintlayout/2.3.0-SNAPSHOT/constraintlayout-2.3.0-20251118.131355-1.aar
 Version: 2.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium
index f64a73a..8cfcd95 100644
--- a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium
@@ -1,6 +1,6 @@
 Name: ConstraintLayout Core
 Short Name: constraintlayout-core
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/constraintlayout/constraintlayout-core/1.2.0-SNAPSHOT/constraintlayout-core-1.2.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/constraintlayout/constraintlayout-core/1.2.0-SNAPSHOT/constraintlayout-core-1.2.0-20251118.131355-1.jar
 Version: 1.2.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_core_core/README.chromium b/third_party/androidx/committed/libs/androidx_core_core/README.chromium
index 7f82b53..4fbfc47 100644
--- a/third_party/androidx/committed/libs/androidx_core_core/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_core_core/README.chromium
@@ -1,6 +1,6 @@
 Name: Core
 Short Name: core
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/core/core/1.18.0-SNAPSHOT/core-1.18.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/core/core/1.18.0-SNAPSHOT/core-1.18.0-20251118.131355-1.aar
 Version: 1.18.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium
index 3024182..98a780d 100644
--- a/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium
@@ -1,6 +1,6 @@
 Name: Core Kotlin Extensions
 Short Name: core-ktx
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/core/core-ktx/1.18.0-SNAPSHOT/core-ktx-1.18.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/core/core-ktx/1.18.0-SNAPSHOT/core-ktx-1.18.0-20251118.131355-1.aar
 Version: 1.18.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium b/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium
index 468d522..f92fd6c 100644
--- a/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium
@@ -1,6 +1,6 @@
 Name: androidx.core:core-viewtree
 Short Name: core-viewtree
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/core/core-viewtree/1.1.0-SNAPSHOT/core-viewtree-1.1.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/core/core-viewtree/1.1.0-SNAPSHOT/core-viewtree-1.1.0-20251118.131355-1.aar
 Version: 1.1.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium
index 29b58b3..05e60a1 100644
--- a/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium
@@ -1,6 +1,6 @@
 Name: Credentials
 Short Name: credentials
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/credentials/credentials/1.6.0-SNAPSHOT/credentials-1.6.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/credentials/credentials/1.6.0-SNAPSHOT/credentials-1.6.0-20251118.131355-1.aar
 Version: 1.6.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium
index bfce4e98..a48dbcf 100644
--- a/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium
@@ -1,6 +1,6 @@
 Name: Credentials Play Services Auth
 Short Name: credentials-play-services-auth
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/credentials/credentials-play-services-auth/1.6.0-SNAPSHOT/credentials-play-services-auth-1.6.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/credentials/credentials-play-services-auth/1.6.0-SNAPSHOT/credentials-play-services-auth-1.6.0-20251118.131355-1.aar
 Version: 1.6.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium
index 584832f..e275100 100644
--- a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium
@@ -1,6 +1,6 @@
 Name: androidx.credentials.registry:registry-provider
 Short Name: registry-provider
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/credentials/registry/registry-provider/1.0.0-SNAPSHOT/registry-provider-1.0.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/credentials/registry/registry-provider/1.0.0-SNAPSHOT/registry-provider-1.0.0-20251118.131355-1.aar
 Version: 1.0.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium
index c2368cab..956b2a96 100644
--- a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium
@@ -1,6 +1,6 @@
 Name: androidx.credentials.registry:registry-provider-play-services
 Short Name: registry-provider-play-services
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/credentials/registry/registry-provider-play-services/1.0.0-SNAPSHOT/registry-provider-play-services-1.0.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/credentials/registry/registry-provider-play-services/1.0.0-SNAPSHOT/registry-provider-play-services-1.0.0-20251118.131355-1.aar
 Version: 1.0.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium b/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium
index 9592c6d..aba5149 100644
--- a/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium
@@ -1,6 +1,6 @@
 Name: Cursor Adapter
 Short Name: cursoradapter
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/cursoradapter/cursoradapter/1.1.0-SNAPSHOT/cursoradapter-1.1.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/cursoradapter/cursoradapter/1.1.0-SNAPSHOT/cursoradapter-1.1.0-20251118.131355-1.aar
 Version: 1.1.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium
index d7f3f5c..8d0526d 100644
--- a/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium
@@ -1,6 +1,6 @@
 Name: DataStore
 Short Name: datastore-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-android/1.3.0-SNAPSHOT/datastore-android-1.3.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-android/1.3.0-SNAPSHOT/datastore-android-1.3.0-20251118.131355-1.aar
 Version: 1.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium
index d3681ae64..6f1eef6 100644
--- a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium
@@ -1,6 +1,6 @@
 Name: DataStore Core
 Short Name: datastore-core-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-core-android/1.3.0-SNAPSHOT/datastore-core-android-1.3.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-core-android/1.3.0-SNAPSHOT/datastore-core-android-1.3.0-20251118.131355-1.aar
 Version: 1.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium
index b3019943..43d5980 100644
--- a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium
@@ -1,6 +1,6 @@
 Name: DataStore Core Okio
 Short Name: datastore-core-okio-jvm
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-core-okio-jvm/1.3.0-SNAPSHOT/datastore-core-okio-jvm-1.3.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-core-okio-jvm/1.3.0-SNAPSHOT/datastore-core-okio-jvm-1.3.0-20251118.131355-1.jar
 Version: 1.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium
index 8957000d..6f6d06af 100644
--- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Preferences DataStore
 Short Name: datastore-preferences-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-preferences-android/1.3.0-SNAPSHOT/datastore-preferences-android-1.3.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-preferences-android/1.3.0-SNAPSHOT/datastore-preferences-android-1.3.0-20251118.131355-1.aar
 Version: 1.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium
index caa62a2f..de15b6c 100644
--- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Preferences DataStore Core
 Short Name: datastore-preferences-core-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-preferences-core-android/1.3.0-SNAPSHOT/datastore-preferences-core-android-1.3.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-preferences-core-android/1.3.0-SNAPSHOT/datastore-preferences-core-android-1.3.0-20251118.131355-1.aar
 Version: 1.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium
index 284ca65..fe22444 100644
--- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium
@@ -1,6 +1,6 @@
 Name: Preferences External Protobuf
 Short Name: datastore-preferences-external-protobuf
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-preferences-external-protobuf/1.3.0-SNAPSHOT/datastore-preferences-external-protobuf-1.3.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-preferences-external-protobuf/1.3.0-SNAPSHOT/datastore-preferences-external-protobuf-1.3.0-20251118.131355-1.jar
 Version: 1.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: BSD-3-Clause
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium
index 6fcc4ee6..015aed45 100644
--- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium
@@ -1,6 +1,6 @@
 Name: Preferences DataStore Proto
 Short Name: datastore-preferences-proto
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/datastore/datastore-preferences-proto/1.3.0-SNAPSHOT/datastore-preferences-proto-1.3.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/datastore/datastore-preferences-proto/1.3.0-SNAPSHOT/datastore-preferences-proto-1.3.0-20251118.131355-1.jar
 Version: 1.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium b/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium
index 2e38082..ae6b1ffc 100644
--- a/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium
@@ -1,6 +1,6 @@
 Name: Drawer Layout
 Short Name: drawerlayout
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/drawerlayout/drawerlayout/1.3.0-SNAPSHOT/drawerlayout-1.3.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/drawerlayout/drawerlayout/1.3.0-SNAPSHOT/drawerlayout-1.3.0-20251118.131355-1.aar
 Version: 1.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium b/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium
index b52f09b..34022b4d 100644
--- a/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium
@@ -1,6 +1,6 @@
 Name: Emoji
 Short Name: emoji
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/emoji/emoji/1.2.0-SNAPSHOT/emoji-1.2.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/emoji/emoji/1.2.0-SNAPSHOT/emoji-1.2.0-20251118.131355-1.aar
 Version: 1.2.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0, SIL Open Font License, Version 1.1, Unicode, Inc. License
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium
index 3f91a717..3ce5372 100644
--- a/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium
@@ -1,6 +1,6 @@
 Name: fragment
 Short Name: fragment
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/fragment/fragment/1.9.0-SNAPSHOT/fragment-1.9.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/fragment/fragment/1.9.0-SNAPSHOT/fragment-1.9.0-20251118.131355-1.aar
 Version: 1.9.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium
index 3d72f8a..2351229 100644
--- a/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium
@@ -1,6 +1,6 @@
 Name: Fragment Compose
 Short Name: fragment-compose
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/fragment/fragment-compose/1.9.0-SNAPSHOT/fragment-compose-1.9.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/fragment/fragment-compose/1.9.0-SNAPSHOT/fragment-compose-1.9.0-20251118.131355-1.aar
 Version: 1.9.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium
index 386eb2b5..586e90f 100644
--- a/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium
@@ -1,6 +1,6 @@
 Name: Fragment Kotlin Extensions
 Short Name: fragment-ktx
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/fragment/fragment-ktx/1.9.0-SNAPSHOT/fragment-ktx-1.9.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/fragment/fragment-ktx/1.9.0-SNAPSHOT/fragment-ktx-1.9.0-20251118.131355-1.aar
 Version: 1.9.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium
index 87edb17..30ce7f3 100644
--- a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium
@@ -1,6 +1,6 @@
 Name: Fragment Testing Extensions
 Short Name: fragment-testing
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/fragment/fragment-testing/1.9.0-SNAPSHOT/fragment-testing-1.9.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/fragment/fragment-testing/1.9.0-SNAPSHOT/fragment-testing-1.9.0-20251118.131355-1.aar
 Version: 1.9.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium
index 500e2b1..00faae7 100644
--- a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium
@@ -1,6 +1,6 @@
 Name: Fragment Testing Manifest dependency
 Short Name: fragment-testing-manifest
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/fragment/fragment-testing-manifest/1.9.0-SNAPSHOT/fragment-testing-manifest-1.9.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/fragment/fragment-testing-manifest/1.9.0-SNAPSHOT/fragment-testing-manifest-1.9.0-20251118.131355-1.aar
 Version: 1.9.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium b/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium
index e4ffb0e..c56ec6fb 100644
--- a/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium
@@ -1,6 +1,6 @@
 Name: Android Graphics Path
 Short Name: graphics-path
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/graphics/graphics-path/1.1.0-SNAPSHOT/graphics-path-1.1.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/graphics/graphics-path/1.1.0-SNAPSHOT/graphics-path-1.1.0-20251118.131355-1.aar
 Version: 1.1.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium b/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium
index f974e31..b48b576 100644
--- a/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium
@@ -1,6 +1,6 @@
 Name: Interpolators
 Short Name: interpolator
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/interpolator/interpolator/1.1.0-SNAPSHOT/interpolator-1.1.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/interpolator/interpolator/1.1.0-SNAPSHOT/interpolator-1.1.0-20251118.131355-1.aar
 Version: 1.1.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium
index be39043d..eeef718 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle-Common for Java 8
 Short Name: lifecycle-common-java8
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-common-java8/2.11.0-SNAPSHOT/lifecycle-common-java8-2.11.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-common-java8/2.11.0-SNAPSHOT/lifecycle-common-java8-2.11.0-20251118.131355-1.jar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium
index 9854639..3f0ae2e 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle-Common
 Short Name: lifecycle-common-jvm
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-common-jvm/2.11.0-SNAPSHOT/lifecycle-common-jvm-2.11.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-common-jvm/2.11.0-SNAPSHOT/lifecycle-common-jvm-2.11.0-20251118.131355-1.jar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium
index d855084..55c6ec5 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle LiveData
 Short Name: lifecycle-livedata
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-livedata/2.11.0-SNAPSHOT/lifecycle-livedata-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-livedata/2.11.0-SNAPSHOT/lifecycle-livedata-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium
index 4bf7d585..81421c96 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle LiveData Core
 Short Name: lifecycle-livedata-core
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core/2.11.0-SNAPSHOT/lifecycle-livedata-core-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core/2.11.0-SNAPSHOT/lifecycle-livedata-core-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium
index f2fdf19..1867e11 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium
@@ -1,6 +1,6 @@
 Name: LiveData Core Kotlin Extensions
 Short Name: lifecycle-livedata-core-ktx
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-core-ktx-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-core-ktx-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium
index 2a923fd0..3c00be24 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium
@@ -1,6 +1,6 @@
 Name: LiveData Kotlin Extensions
 Short Name: lifecycle-livedata-ktx
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-livedata-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-ktx-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-livedata-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-ktx-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium
index 08fbe685..9bcd28a2 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle Process
 Short Name: lifecycle-process
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-process/2.11.0-SNAPSHOT/lifecycle-process-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-process/2.11.0-SNAPSHOT/lifecycle-process-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium
index 2dc40531..165a75f 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle Runtime
 Short Name: lifecycle-runtime-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-runtime-android/2.11.0-SNAPSHOT/lifecycle-runtime-android-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-runtime-android/2.11.0-SNAPSHOT/lifecycle-runtime-android-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium
index 05a40121..13b0385 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle Runtime Compose
 Short Name: lifecycle-runtime-compose-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-runtime-compose-android/2.11.0-SNAPSHOT/lifecycle-runtime-compose-android-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-runtime-compose-android/2.11.0-SNAPSHOT/lifecycle-runtime-compose-android-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium
index 8586739..6c91556 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle Kotlin Extensions
 Short Name: lifecycle-runtime-ktx-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-runtime-ktx-android/2.11.0-SNAPSHOT/lifecycle-runtime-ktx-android-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-runtime-ktx-android/2.11.0-SNAPSHOT/lifecycle-runtime-ktx-android-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium
index be023106..ffc54ba 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle Service
 Short Name: lifecycle-service
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-service/2.11.0-SNAPSHOT/lifecycle-service-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-service/2.11.0-SNAPSHOT/lifecycle-service-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium
index 114c995..051d05b6 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle ViewModel
 Short Name: lifecycle-viewmodel-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-android-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-android-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium
index f97888f..1335f84 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle ViewModel Compose
 Short Name: lifecycle-viewmodel-compose-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-compose-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-compose-android-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-compose-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-compose-android-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium
index e51a37e..083bc40d 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle ViewModel Kotlin Extensions
 Short Name: lifecycle-viewmodel-ktx
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-ktx/2.11.0-SNAPSHOT/lifecycle-viewmodel-ktx-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-ktx/2.11.0-SNAPSHOT/lifecycle-viewmodel-ktx-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium
index 713dde08..27c076df 100644
--- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Lifecycle ViewModel with SavedState
 Short Name: lifecycle-viewmodel-savedstate-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-savedstate-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-savedstate-android-2.11.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-savedstate-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-savedstate-android-2.11.0-20251118.131355-1.aar
 Version: 2.11.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium b/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium
index 134316b..c621f92 100644
--- a/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium
@@ -1,6 +1,6 @@
 Name: loader
 Short Name: loader
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/loader/loader/1.2.0-SNAPSHOT/loader-1.2.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/loader/loader/1.2.0-SNAPSHOT/loader-1.2.0-20251118.131355-1.aar
 Version: 1.2.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_media_media/README.chromium b/third_party/androidx/committed/libs/androidx_media_media/README.chromium
index 28b437b..45620a0 100644
--- a/third_party/androidx/committed/libs/androidx_media_media/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_media_media/README.chromium
@@ -1,6 +1,6 @@
 Name: Media
 Short Name: media
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/media/media/1.8.0-SNAPSHOT/media-1.8.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/media/media/1.8.0-SNAPSHOT/media-1.8.0-20251118.131355-1.aar
 Version: 1.8.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium b/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium
index 2955f89..f832f32 100644
--- a/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium
@@ -1,6 +1,6 @@
 Name: MediaRouter
 Short Name: mediarouter
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/mediarouter/mediarouter/1.9.0-SNAPSHOT/mediarouter-1.9.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/mediarouter/mediarouter/1.9.0-SNAPSHOT/mediarouter-1.9.0-20251118.131355-1.aar
 Version: 1.9.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium
index 9894d5e4..255a7f3b0 100644
--- a/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Navigation Common
 Short Name: navigation-common-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/navigation/navigation-common-android/2.10.0-SNAPSHOT/navigation-common-android-2.10.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/navigation/navigation-common-android/2.10.0-SNAPSHOT/navigation-common-android-2.10.0-20251118.131355-1.aar
 Version: 2.10.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium
index fdfdc31..3c0f6403 100644
--- a/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Compose Navigation
 Short Name: navigation-compose-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/navigation/navigation-compose-android/2.10.0-SNAPSHOT/navigation-compose-android-2.10.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/navigation/navigation-compose-android/2.10.0-SNAPSHOT/navigation-compose-android-2.10.0-20251118.131355-1.aar
 Version: 2.10.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium
index e9f3254..221c506 100644
--- a/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Navigation Runtime
 Short Name: navigation-runtime-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/navigation/navigation-runtime-android/2.10.0-SNAPSHOT/navigation-runtime-android-2.10.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/navigation/navigation-runtime-android/2.10.0-SNAPSHOT/navigation-runtime-android-2.10.0-20251118.131355-1.aar
 Version: 2.10.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium
index 97eb6f4..878f4c88 100644
--- a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Navigation Event
 Short Name: navigationevent-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/navigationevent/navigationevent-android/1.1.0-SNAPSHOT/navigationevent-android-1.1.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/navigationevent/navigationevent-android/1.1.0-SNAPSHOT/navigationevent-android-1.1.0-20251118.131355-1.aar
 Version: 1.1.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium
index 7eb4164..1e52f16 100644
--- a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium
@@ -1,6 +1,6 @@
 Name: NavigationEvent Compose
 Short Name: navigationevent-compose-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/navigationevent/navigationevent-compose-android/1.1.0-SNAPSHOT/navigationevent-compose-android-1.1.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/navigationevent/navigationevent-compose-android/1.1.0-SNAPSHOT/navigationevent-compose-android-1.1.0-20251118.131355-1.aar
 Version: 1.1.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium
index 727739b..cd89e90 100644
--- a/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Paging-Common
 Short Name: paging-common-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/paging/paging-common-android/3.4.0-SNAPSHOT/paging-common-android-3.4.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/paging/paging-common-android/3.4.0-SNAPSHOT/paging-common-android-3.4.0-20251118.131355-1.aar
 Version: 3.4.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium
index 10ce4a6..d07c8d88 100644
--- a/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium
@@ -1,6 +1,6 @@
 Name: Paging-Common Kotlin Extensions
 Short Name: paging-common-ktx
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/paging/paging-common-ktx/3.4.0-SNAPSHOT/paging-common-ktx-3.4.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/paging/paging-common-ktx/3.4.0-SNAPSHOT/paging-common-ktx-3.4.0-20251118.131355-1.jar
 Version: 3.4.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium
index b50e0a8..30090d7 100644
--- a/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Paging-Compose
 Short Name: paging-compose-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/paging/paging-compose-android/3.4.0-SNAPSHOT/paging-compose-android-3.4.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/paging/paging-compose-android/3.4.0-SNAPSHOT/paging-compose-android-3.4.0-20251118.131355-1.aar
 Version: 3.4.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium
index ed9bdac..273eb840b 100644
--- a/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium
@@ -1,6 +1,6 @@
 Name: Paging-Runtime
 Short Name: paging-runtime
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/paging/paging-runtime/3.4.0-SNAPSHOT/paging-runtime-3.4.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/paging/paging-runtime/3.4.0-SNAPSHOT/paging-runtime-3.4.0-20251118.131355-1.aar
 Version: 3.4.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium b/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium
index e9c2e16d..579e2ff 100644
--- a/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium
@@ -1,6 +1,6 @@
 Name: Palette
 Short Name: palette
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/palette/palette/1.1.0-SNAPSHOT/palette-1.1.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/palette/palette/1.1.0-SNAPSHOT/palette-1.1.0-20251118.131355-1.aar
 Version: 1.1.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium b/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium
index 62adc53..7e08aac 100644
--- a/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium
@@ -1,6 +1,6 @@
 Name: androidx.pdf:pdf-document-service
 Short Name: pdf-document-service
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/pdf/pdf-document-service/1.0.0-SNAPSHOT/pdf-document-service-1.0.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/pdf/pdf-document-service/1.0.0-SNAPSHOT/pdf-document-service-1.0.0-20251118.131355-1.aar
 Version: 1.0.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium
index 8ecc3077..439593b 100644
--- a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium
@@ -1,6 +1,6 @@
 Name: androidx.pdf:pdf-viewer
 Short Name: pdf-viewer
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/pdf/pdf-viewer/1.0.0-SNAPSHOT/pdf-viewer-1.0.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/pdf/pdf-viewer/1.0.0-SNAPSHOT/pdf-viewer-1.0.0-20251118.131355-1.aar
 Version: 1.0.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium
index 00ec3d41..ed204240 100644
--- a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium
@@ -1,6 +1,6 @@
 Name: androidx.pdf:pdf-viewer-fragment
 Short Name: pdf-viewer-fragment
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/pdf/pdf-viewer-fragment/1.0.0-SNAPSHOT/pdf-viewer-fragment-1.0.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/pdf/pdf-viewer-fragment/1.0.0-SNAPSHOT/pdf-viewer-fragment-1.0.0-20251118.131355-1.aar
 Version: 1.0.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium b/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium
index aa2915e2..a2291a5b 100644
--- a/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium
@@ -1,6 +1,6 @@
 Name: Preference
 Short Name: preference
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/preference/preference/1.3.0-SNAPSHOT/preference-1.3.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/preference/preference/1.3.0-SNAPSHOT/preference-1.3.0-20251118.131355-1.aar
 Version: 1.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium b/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium
index a728e1ff..3a3156c 100644
--- a/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium
@@ -1,6 +1,6 @@
 Name: Profile Installer
 Short Name: profileinstaller
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/profileinstaller/profileinstaller/1.5.0-SNAPSHOT/profileinstaller-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/profileinstaller/profileinstaller/1.5.0-SNAPSHOT/profileinstaller-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium b/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium
index 869dc3c..87186ac 100644
--- a/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium
@@ -1,6 +1,6 @@
 Name: RecyclerView
 Short Name: recyclerview
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/recyclerview/recyclerview/1.5.0-SNAPSHOT/recyclerview-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/recyclerview/recyclerview/1.5.0-SNAPSHOT/recyclerview-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium b/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium
index 0eb2694..03c8554 100644
--- a/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium
@@ -1,6 +1,6 @@
 Name: Resource Inspection - Annotations
 Short Name: resourceinspection-annotation
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/resourceinspection/resourceinspection-annotation/1.1.0-SNAPSHOT/resourceinspection-annotation-1.1.0-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/resourceinspection/resourceinspection-annotation/1.1.0-SNAPSHOT/resourceinspection-annotation-1.1.0-20251118.131355-1.jar
 Version: 1.1.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium
index 441939c..79a4fbb9 100644
--- a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Saved State
 Short Name: savedstate-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/savedstate/savedstate-android/1.5.0-SNAPSHOT/savedstate-android-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/savedstate/savedstate-android/1.5.0-SNAPSHOT/savedstate-android-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium
index b2c1b3f2..ce58df04 100644
--- a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Saved State Compose
 Short Name: savedstate-compose-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/savedstate/savedstate-compose-android/1.5.0-SNAPSHOT/savedstate-compose-android-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/savedstate/savedstate-compose-android/1.5.0-SNAPSHOT/savedstate-compose-android-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium
index 985484a7..aad8c362 100644
--- a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium
@@ -1,6 +1,6 @@
 Name: SavedState Kotlin Extensions
 Short Name: savedstate-ktx
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/savedstate/savedstate-ktx/1.5.0-SNAPSHOT/savedstate-ktx-1.5.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/savedstate/savedstate-ktx/1.5.0-SNAPSHOT/savedstate-ktx-1.5.0-20251118.131355-1.aar
 Version: 1.5.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium b/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium
index 8860dd4..a7f5304 100644
--- a/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium
@@ -1,6 +1,6 @@
 Name: Sliding Pane Layout
 Short Name: slidingpanelayout
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/slidingpanelayout/slidingpanelayout/1.3.0-SNAPSHOT/slidingpanelayout-1.3.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/slidingpanelayout/slidingpanelayout/1.3.0-SNAPSHOT/slidingpanelayout-1.3.0-20251118.131355-1.aar
 Version: 1.3.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium b/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium
index c73ebb1..c3f6f71 100644
--- a/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium
@@ -1,6 +1,6 @@
 Name: Swipe Refresh Layout
 Short Name: swiperefreshlayout
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/swiperefreshlayout/swiperefreshlayout/1.2.0-SNAPSHOT/swiperefreshlayout-1.2.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/swiperefreshlayout/swiperefreshlayout/1.2.0-SNAPSHOT/swiperefreshlayout-1.2.0-20251118.131355-1.aar
 Version: 1.2.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium b/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium
index d56567b..8d6a8f67 100644
--- a/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium
@@ -1,6 +1,6 @@
 Name: UIAutomator
 Short Name: uiautomator
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/test/uiautomator/uiautomator/2.4.0-SNAPSHOT/uiautomator-2.4.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/test/uiautomator/uiautomator/2.4.0-SNAPSHOT/uiautomator-2.4.0-20251118.131355-1.aar
 Version: 2.4.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium
index 683fad6..9a2178b 100644
--- a/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium
@@ -1,6 +1,6 @@
 Name: Tracing
 Short Name: tracing-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/tracing/tracing-android/2.0.0-SNAPSHOT/tracing-android-2.0.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/tracing/tracing-android/2.0.0-SNAPSHOT/tracing-android-2.0.0-20251118.131355-1.aar
 Version: 2.0.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium
index f3723c3..5cb5c5f 100644
--- a/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium
@@ -1,6 +1,6 @@
 Name: Tracing Kotlin Extensions
 Short Name: tracing-ktx
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/tracing/tracing-ktx/2.0.0-SNAPSHOT/tracing-ktx-2.0.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/tracing/tracing-ktx/2.0.0-SNAPSHOT/tracing-ktx-2.0.0-20251118.131355-1.aar
 Version: 2.0.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto/README.chromium
index 1b98d88eb..b7e94919 100644
--- a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto/README.chromium
@@ -1,6 +1,6 @@
 Name: Tracing Perfetto
 Short Name: tracing-perfetto
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/tracing/tracing-perfetto/1.0.1-SNAPSHOT/tracing-perfetto-1.0.1-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/tracing/tracing-perfetto/1.0.1-SNAPSHOT/tracing-perfetto-1.0.1-20251118.131355-1.aar
 Version: 1.0.1-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_binary/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_binary/README.chromium
index f739649..face7569 100644
--- a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_binary/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_binary/README.chromium
@@ -1,6 +1,6 @@
 Name: Tracing Perfetto Binary
 Short Name: tracing-perfetto-binary
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/tracing/tracing-perfetto-binary/1.0.1-SNAPSHOT/tracing-perfetto-binary-1.0.1-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/tracing/tracing-perfetto-binary/1.0.1-SNAPSHOT/tracing-perfetto-binary-1.0.1-20251118.131355-1.aar
 Version: 1.0.1-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_handshake/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_handshake/README.chromium
index 9d5779f4..759b6393 100644
--- a/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_handshake/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_perfetto_handshake/README.chromium
@@ -1,6 +1,6 @@
 Name: Tracing Perfetto Handshake
 Short Name: tracing-perfetto-handshake
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/tracing/tracing-perfetto-handshake/1.0.1-SNAPSHOT/tracing-perfetto-handshake-1.0.1-20251117.114225-1.jar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/tracing/tracing-perfetto-handshake/1.0.1-SNAPSHOT/tracing-perfetto-handshake-1.0.1-20251118.131355-1.jar
 Version: 1.0.1-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium b/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium
index abce3c45..1948989d 100644
--- a/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium
@@ -1,6 +1,6 @@
 Name: Transition
 Short Name: transition
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/transition/transition/1.7.0-SNAPSHOT/transition-1.7.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/transition/transition/1.7.0-SNAPSHOT/transition-1.7.0-20251118.131355-1.aar
 Version: 1.7.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium b/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium
index edda66f4..367403bd 100644
--- a/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium
@@ -1,6 +1,6 @@
 Name: ViewPager2
 Short Name: viewpager2
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/viewpager2/viewpager2/1.2.0-SNAPSHOT/viewpager2-1.2.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/viewpager2/viewpager2/1.2.0-SNAPSHOT/viewpager2-1.2.0-20251118.131355-1.aar
 Version: 1.2.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium b/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium
index 86aa4b4..50c820af 100644
--- a/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium
@@ -1,6 +1,6 @@
 Name: Webkit
 Short Name: webkit
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/webkit/webkit/1.16.0-SNAPSHOT/webkit-1.16.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/webkit/webkit/1.16.0-SNAPSHOT/webkit-1.16.0-20251118.131355-1.aar
 Version: 1.16.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium b/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium
index 630ead7..899755de 100644
--- a/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium
@@ -1,6 +1,6 @@
 Name: WindowManager Sidecar
 Short Name: sidecar
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/window/sidecar/sidecar/1.0.0-SNAPSHOT/sidecar-1.0.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/window/sidecar/sidecar/1.0.0-SNAPSHOT/sidecar-1.0.0-20251118.131355-1.aar
 Version: 1.0.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_window_window/README.chromium b/third_party/androidx/committed/libs/androidx_window_window/README.chromium
index aa8aeed..29e143b 100644
--- a/third_party/androidx/committed/libs/androidx_window_window/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_window_window/README.chromium
@@ -1,6 +1,6 @@
 Name: WindowManager
 Short Name: window
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/window/window/1.6.0-SNAPSHOT/window-1.6.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/window/window/1.6.0-SNAPSHOT/window-1.6.0-20251118.131355-1.aar
 Version: 1.6.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium
index 764f1f7..39701085 100644
--- a/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium
@@ -1,6 +1,6 @@
 Name: WindowManager Core
 Short Name: window-core-android
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/window/window-core-android/1.6.0-SNAPSHOT/window-core-android-1.6.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/window/window-core-android/1.6.0-SNAPSHOT/window-core-android-1.6.0-20251118.131355-1.aar
 Version: 1.6.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium b/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium
index cd20c69..abb2a0a 100644
--- a/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium
@@ -1,6 +1,6 @@
 Name: WorkManager Multiprocess
 Short Name: work-multiprocess
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/work/work-multiprocess/2.12.0-SNAPSHOT/work-multiprocess-2.12.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/work/work-multiprocess/2.12.0-SNAPSHOT/work-multiprocess-2.12.0-20251118.131355-1.aar
 Version: 2.12.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium b/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium
index d173b51..9d8921a 100644
--- a/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium
+++ b/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium
@@ -1,6 +1,6 @@
 Name: WorkManager Runtime
 Short Name: work-runtime
-URL: https://androidx.dev/snapshots/builds/14447890/artifacts/repository/androidx/work/work-runtime/2.12.0-SNAPSHOT/work-runtime-2.12.0-20251117.114225-1.aar
+URL: https://androidx.dev/snapshots/builds/14455269/artifacts/repository/androidx/work/work-runtime/2.12.0-SNAPSHOT/work-runtime-2.12.0-20251118.131355-1.aar
 Version: 2.12.0-SNAPSHOT
 Update Mechanism: Autoroll
 License: Apache-2.0
diff --git a/third_party/angle b/third_party/angle
index 3a0ebc7..cf53f37 160000
--- a/third_party/angle
+++ b/third_party/angle
@@ -1 +1 @@
-Subproject commit 3a0ebc752488461c12fe63cfd2e067321a1f266f
+Subproject commit cf53f379f81a8c1b43ccd8e087c6b848007f21e6
diff --git a/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc b/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc
index b60bad9ce..bee7446 100644
--- a/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc
+++ b/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc
@@ -117,6 +117,9 @@
   out->selection_clipboard_buffer_available =
       data.selection_clipboard_buffer_available();
 #endif
+#if BUILDFLAG(IS_LINUX)
+  out->middle_click_paste_allowed = data.middle_click_paste_allowed();
+#endif
   out->plugin_fullscreen_allowed = data.plugin_fullscreen_allowed();
   out->caret_browsing_enabled = data.caret_browsing_enabled();
 
diff --git a/third_party/blink/perf_tests/webgpu/resources/webgpu-perf-utils.js b/third_party/blink/perf_tests/webgpu/resources/webgpu-perf-utils.js
index e4c4856..f87182e 100644
--- a/third_party/blink/perf_tests/webgpu/resources/webgpu-perf-utils.js
+++ b/third_party/blink/perf_tests/webgpu/resources/webgpu-perf-utils.js
@@ -1,6 +1,7 @@
 /** Get the adapter for the test. If there is none, skip the test and leave the promise unresolved. */
 function getAdapter() {
   return new Promise(async resolve => {
+    // Always run the test with compat restrictions...
     const adapter = await navigator.gpu?.requestAdapter({ featureLevel: 'compatibility' });
     if (!adapter) {
       skipTest('WebGPU not supported');
@@ -8,11 +9,26 @@
     }
     const hasCore = adapter.features.has('core-features-and-limits');
     PerfTestRunner.log('adapter vendor: ' + adapter.info.vendor);
+    PerfTestRunner.log('adapter isFallbackAdapter: ' + adapter.info.isFallbackAdapter);
     PerfTestRunner.log('adapter hasCore: ' + hasCore);
-    if (new URLSearchParams(location.search).has('compatonly') && hasCore) {
+
+    if (adapter.info.isFallbackAdapter) {
+      skipTest('Refusing to run perf test on a fallback (software) adapter');
+      return;
+    }
+
+    // ... But require the actual adapter to be Core-capable or Core-incapable,
+    // depending on the config.
+    const compatonly = new URLSearchParams(location.search).has('compatonly');
+    if (!compatonly && !hasCore) {
+      skipTest('Refusing to run Core perf test on a Core-incapable adapter');
+      return;
+    }
+    if (compatonly && hasCore) {
       skipTest('Refusing to run Compat perf test on a Core-capable adapter');
       return;
     }
+
     resolve(adapter);
   });
 }
diff --git a/third_party/blink/public/common/renderer_preferences/renderer_preferences.h b/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
index 05a46ed6..d608b6fa 100644
--- a/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
+++ b/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
@@ -88,6 +88,9 @@
 #if BUILDFLAG(IS_OZONE)
   bool selection_clipboard_buffer_available{false};
 #endif
+#if BUILDFLAG(IS_LINUX)
+  bool middle_click_paste_allowed{true};
+#endif
   bool plugin_fullscreen_allowed{true};
   bool caret_browsing_enabled{false};
   bool uses_platform_autofill{false};
diff --git a/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h b/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h
index 6be39a1..455f0fa 100644
--- a/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h
+++ b/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h
@@ -199,6 +199,13 @@
   }
 #endif
 
+#if BUILDFLAG(IS_LINUX)
+  static const bool& middle_click_paste_allowed(
+      const ::blink::RendererPreferences& data) {
+    return data.middle_click_paste_allowed;
+  }
+#endif
+
 #if BUILDFLAG(IS_WIN)
   static const std::u16string& caption_font_family_name(
       const ::blink::RendererPreferences& data) {
diff --git a/third_party/blink/public/mojom/renderer_preferences.mojom b/third_party/blink/public/mojom/renderer_preferences.mojom
index 02ee6bf0..835a1707 100644
--- a/third_party/blink/public/mojom/renderer_preferences.mojom
+++ b/third_party/blink/public/mojom/renderer_preferences.mojom
@@ -197,6 +197,10 @@
   [EnableIf=is_selection_clipboard_buffer_possible]
   bool selection_clipboard_buffer_available = false;
 
+  // Whether to allow pasting text on middle click mouse events.
+  [EnableIf=is_linux]
+  bool middle_click_paste_allowed = true;
+
   // Set to true if the renderer should assume that the embedder delegates all
   // Autofill activity and requests to the platform instead of providing its
   // own implementation.
diff --git a/third_party/blink/public/web/web_settings.h b/third_party/blink/public/web/web_settings.h
index 0076152..02402b1 100644
--- a/third_party/blink/public/web/web_settings.h
+++ b/third_party/blink/public/web/web_settings.h
@@ -280,6 +280,7 @@
   virtual void SetNavigationControls(NavigationControls) = 0;
   virtual void SetAriaModalPrunesAXTree(bool) = 0;
   virtual void SetSelectionClipboardBufferAvailable(bool) = 0;
+  virtual void SetMiddleClickPasteAllowed(bool) = 0;
   virtual void SetAccessibilityIncludeSvgGElement(bool) = 0;
   virtual void SetWebXRImmersiveArAllowed(bool) = 0;
   virtual void SetModalContextMenu(bool) = 0;
diff --git a/third_party/blink/renderer/DEPS b/third_party/blink/renderer/DEPS
index 122cdc8..d58d993b 100644
--- a/third_party/blink/renderer/DEPS
+++ b/third_party/blink/renderer/DEPS
@@ -35,6 +35,7 @@
     "+base/i18n/time_formatting.h",
     "+base/location.h",
     "+base/logging.h",
+    "+base/logging/logging_settings.h",
     "+base/memory/ptr_util.h",
     "+base/memory/ref_counted.h",
     "+base/memory/weak_ptr.h",
diff --git a/third_party/blink/renderer/core/context_features/context_feature_settings.cc b/third_party/blink/renderer/core/context_features/context_feature_settings.cc
index 9b97148..ee47d34 100644
--- a/third_party/blink/renderer/core/context_features/context_feature_settings.cc
+++ b/third_party/blink/renderer/core/context_features/context_feature_settings.cc
@@ -6,13 +6,9 @@
 
 #include "base/memory/protected_memory.h"
 #include "third_party/blink/public/platform/platform.h"
-#include "third_party/blink/renderer/core/execution_context/execution_context.h"
 
 namespace blink {
 
-ContextFeatureSettings::ContextFeatureSettings(ExecutionContext& context)
-    : execution_context_(context) {}
-
 DEFINE_PROTECTED_DATA base::ProtectedMemory<bool>
     ContextFeatureSettings::mojo_js_allowed_;
 
@@ -22,7 +18,7 @@
     CreationMode creation_mode) {
   ContextFeatureSettings* settings = context->GetContextFeatureSettings();
   if (!settings && creation_mode == CreationMode::kCreateIfNotExists) {
-    settings = MakeGarbageCollected<ContextFeatureSettings>(*context);
+    settings = MakeGarbageCollected<ContextFeatureSettings>();
     context->SetContextFeatureSettings(settings);
   }
   return settings;
@@ -50,10 +46,6 @@
   CHECK(*mojo_js_allowed_);
 }
 
-void ContextFeatureSettings::Trace(Visitor* visitor) const {
-  visitor->Trace(execution_context_);
-}
-
 bool ContextFeatureSettings::isMojoJSEnabled() const {
   if (enable_mojo_js_) {
     // If enable_mojo_js_ is true and mojo_js_allowed_ isn't also true, then it
@@ -65,4 +57,6 @@
   return enable_mojo_js_;
 }
 
+void ContextFeatureSettings::Trace(Visitor* visitor) const {}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/context_features/context_feature_settings.h b/third_party/blink/renderer/core/context_features/context_feature_settings.h
index 903fbd8..447969a 100644
--- a/third_party/blink/renderer/core/context_features/context_feature_settings.h
+++ b/third_party/blink/renderer/core/context_features/context_feature_settings.h
@@ -23,7 +23,7 @@
  public:
   enum class CreationMode { kCreateIfNotExists, kDontCreateIfNotExists };
 
-  explicit ContextFeatureSettings(ExecutionContext&);
+  ContextFeatureSettings() = default;
 
   // Returns the ContextFeatureSettings for an ExecutionContext. If one does not
   // already exist for the given context, one is created.
@@ -68,7 +68,6 @@
   void Trace(Visitor*) const override;
 
  private:
-  Member<ExecutionContext> execution_context_;
   bool enable_mojo_js_ = false;
   bool enable_mojo_js_file_system_access_helper_ = false;
   bool enable_private_aggregation_in_shared_storage_ = false;
diff --git a/third_party/blink/renderer/core/css/css_length_resolver.cc b/third_party/blink/renderer/core/css/css_length_resolver.cc
index 9c6079a..f932224f 100644
--- a/third_party/blink/renderer/core/css/css_length_resolver.cc
+++ b/third_party/blink/renderer/core/css/css_length_resolver.cc
@@ -146,7 +146,7 @@
   using Holder = DisallowNewWrapper<StylePositionAnchor>;
   DEFINE_STATIC_LOCAL(Persistent<Holder>, empty,
                       (MakeGarbageCollected<Holder>(StylePositionAnchor(
-                          StylePositionAnchor::Type::kAuto))));
+                          StylePositionAnchor::Initial()))));
   return empty->Value();
 }
 
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5
index e0312e8..7d51828 100644
--- a/third_party/blink/renderer/core/css/css_properties.json5
+++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -4836,11 +4836,11 @@
       style_builder_custom_functions: ["initial", "inherit", "value"],
       include_paths: ["third_party/blink/renderer/core/style/style_position_anchor.h"],
       type_name: "StylePositionAnchor",
-      default_value: "StylePositionAnchor(StylePositionAnchor::Type::kAuto)",
+      default_value: "StylePositionAnchor::Initial()",
       field_group: "*",
       field_template: "external",
       converter: "ConvertPositionAnchor",
-      keywords: ["auto"],
+      keywords: ["auto", "none"],
       typedom_types: ["Keyword"],
       valid_for_permission_element: true,
       valid_for_position_try: true,
@@ -5705,7 +5705,6 @@
       default_value: "no-autospace",
       typedom_types: ["Keyword"],
       invalidate: ["reshape"],
-      runtime_flag: "CSSTextAutoSpace",
     },
     {
       name: "text-box",
diff --git a/third_party/blink/renderer/core/css/css_to_length_conversion_data.h b/third_party/blink/renderer/core/css/css_to_length_conversion_data.h
index 77b6c39..42db5c3 100644
--- a/third_party/blink/renderer/core/css/css_to_length_conversion_data.h
+++ b/third_party/blink/renderer/core/css/css_to_length_conversion_data.h
@@ -285,7 +285,7 @@
 
    private:
     AnchorEvaluator* evaluator_ = nullptr;
-    StylePositionAnchor position_anchor_{StylePositionAnchor::Type::kAuto};
+    StylePositionAnchor position_anchor_ = StylePositionAnchor::Initial();
     std::optional<PositionAreaOffsets> position_area_offsets_;
   };
 
diff --git a/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc b/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc
index a320b39..e2687dc 100644
--- a/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc
+++ b/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc
@@ -104,7 +104,7 @@
         CSSToLengthConversionData::ContainerSizes(),
         CSSToLengthConversionData::AnchorData(
             options.anchor_evaluator,
-            StylePositionAnchor(StylePositionAnchor::Type::kAuto),
+            StylePositionAnchor(StylePositionAnchor::Type::kNone),
             /* position_area_offsets */ std::nullopt),
         options.data_zoom.value_or(div->GetComputedStyle()->EffectiveZoom()),
         options.flags ? *options.flags : ignored_flags_, /*element=*/nullptr);
@@ -541,7 +541,7 @@
       CSSToLengthConversionData::ViewportSize(GetDocument().GetLayoutView()),
       CSSToLengthConversionData::ContainerSizes(child),
       CSSToLengthConversionData::AnchorData(
-          nullptr, StylePositionAnchor(StylePositionAnchor::Type::kAuto),
+          nullptr, StylePositionAnchor(StylePositionAnchor::Type::kNone),
           /* position_area_offsets */ std::nullopt),
       child->GetComputedStyle()->EffectiveZoom(), flags, /*element=*/nullptr);
 
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator.cc b/third_party/blink/renderer/core/css/media_query_evaluator.cc
index bed27ca..907ffa9 100644
--- a/third_party/blink/renderer/core/css/media_query_evaluator.cc
+++ b/third_party/blink/renderer/core/css/media_query_evaluator.cc
@@ -33,9 +33,6 @@
 #include "third_party/blink/public/common/css/forced_colors.h"
 #include "third_party/blink/public/common/css/navigation_controls.h"
 #include "third_party/blink/public/common/css/scripting.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
 #include "third_party/blink/public/mojom/device_posture/device_posture_provider.mojom-blink.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h"
 #include "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h"
@@ -79,27 +76,6 @@
 
 namespace {
 
-template <class T>
-void MaybeRecordMediaFeatureValue(
-    const MediaValues& media_values,
-    const IdentifiableSurface::MediaFeatureName feature_name,
-    T value) {
-  Document* document = nullptr;
-  if ((document = media_values.GetDocument()) &&
-      (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-          IdentifiableSurface::Type::kMediaFeature)) &&
-      !document->WasMediaFeatureEvaluated(static_cast<int>(feature_name))) {
-    IdentifiableSurface surface = IdentifiableSurface::FromTypeAndToken(
-        IdentifiableSurface::Type::kMediaFeature,
-        IdentifiableToken(feature_name));
-
-    IdentifiabilityMetricBuilder(document->UkmSourceID())
-        .Add(surface, IdentifiableToken(value))
-        .Record(document->UkmRecorder());
-    document->SetMediaFeatureEvaluated(static_cast<int>(feature_name));
-  }
-}
-
 // Supported types: <number> | <percentage> | <length> | <angle> | <time> |
 // <resolution>
 bool TypesMatch(const CSSNumericLiteralValue& a,
@@ -348,9 +324,6 @@
                                   const MediaValues& media_values) {
   float number;
   int bits_per_component = media_values.ColorBitsPerComponent();
-  MaybeRecordMediaFeatureValue(media_values,
-                               IdentifiableSurface::MediaFeatureName::kColor,
-                               bits_per_component);
   if (value.IsValid()) {
     return NumberValue(value, number, media_values) &&
            CompareValue(bits_per_component, ClampTo<int>(number), op);
@@ -381,9 +354,6 @@
                                        const MediaValues& media_values) {
   float number;
   int bits_per_component = media_values.MonochromeBitsPerComponent();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kMonochrome,
-      bits_per_component);
   if (value.IsValid()) {
     return NumberValue(value, number, media_values) &&
            CompareValue(bits_per_component, ClampTo<int>(number), op);
@@ -410,9 +380,6 @@
 
   blink::mojom::DisplayMode mode = media_values.DisplayMode();
 
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kDisplayMode, mode);
-
   switch (value.Id()) {
     case CSSValueID::kFullscreen:
       return mode == blink::mojom::DisplayMode::kFullscreen;
@@ -450,9 +417,6 @@
   }
 
   ui::mojom::blink::WindowShowState state = media_values.WindowShowState();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kDisplayState,
-      state);
 
   switch (value.Id()) {
     case CSSValueID::kFullscreen:
@@ -484,9 +448,6 @@
   }
 
   bool resizable = media_values.Resizable();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kResizable,
-      resizable);
 
   return (resizable && value.Id() == CSSValueID::kTrue) ||
          (!resizable && value.Id() == CSSValueID::kFalse);
@@ -500,15 +461,9 @@
 
   if (value.IsId()) {
     if (width > height) {  // Square viewport is portrait.
-      MaybeRecordMediaFeatureValue(
-          media_values, IdentifiableSurface::MediaFeatureName::kOrientation,
-          CSSValueID::kLandscape);
       return CSSValueID::kLandscape == value.Id();
     }
 
-    MaybeRecordMediaFeatureValue(
-        media_values, IdentifiableSurface::MediaFeatureName::kOrientation,
-        CSSValueID::kPortrait);
     return CSSValueID::kPortrait == value.Id();
   }
 
@@ -519,13 +474,6 @@
 static bool AspectRatioMediaFeatureEval(const MediaQueryExpValue& value,
                                         MediaQueryOperator op,
                                         const MediaValues& media_values) {
-  double aspect_ratio =
-      std::max(*media_values.Width(), *media_values.Height()) /
-      std::min(*media_values.Width(), *media_values.Height());
-  MaybeRecordMediaFeatureValue(
-      media_values,
-      IdentifiableSurface::MediaFeatureName::kAspectRatioNormalized,
-      aspect_ratio);
   if (value.IsValid()) {
     return CompareAspectRatioValue(value, *media_values.Width(),
                                    *media_values.Height(), op, media_values);
@@ -562,15 +510,9 @@
 
   switch (value.Id()) {
     case CSSValueID::kStandard:
-      MaybeRecordMediaFeatureValue(
-          media_values, IdentifiableSurface::MediaFeatureName::kDynamicRange,
-          CSSValueID::kStandard);
       return true;
 
     case CSSValueID::kHigh:
-      MaybeRecordMediaFeatureValue(
-          media_values, IdentifiableSurface::MediaFeatureName::kDynamicRange,
-          media_values.DeviceSupportsHDR());
       return media_values.DeviceSupportsHDR();
 
     default:
@@ -609,10 +551,6 @@
     actual_resolution = 300 / kCssPixelsPerInch;
   }
 
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kResolution,
-      actual_resolution);
-
   if (!value.IsValid()) {
     return !!actual_resolution;
   }
@@ -965,9 +903,6 @@
   int have3d_rendering;
 
   bool three_d_enabled = media_values.ThreeDEnabled();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kTransform3d,
-      three_d_enabled);
 
   return_value_if_no_parameter = three_d_enabled;
   have3d_rendering = three_d_enabled ? 1 : 0;
@@ -984,8 +919,6 @@
                                   MediaQueryOperator,
                                   const MediaValues& media_values) {
   HoverType hover = media_values.PrimaryHoverType();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kHover, hover);
 
   if (!value.IsValid()) {
     return hover != HoverType::kHoverNone;
@@ -1004,9 +937,6 @@
                                      MediaQueryOperator,
                                      const MediaValues& media_values) {
   int available_hover_types = media_values.AvailableHoverTypes();
-  MaybeRecordMediaFeatureValue(media_values,
-                               IdentifiableSurface::MediaFeatureName::kAnyHover,
-                               available_hover_types);
 
   if (!value.IsValid()) {
     return available_hover_types & ~static_cast<int>(HoverType::kHoverNone);
@@ -1040,8 +970,6 @@
                                     MediaQueryOperator,
                                     const MediaValues& media_values) {
   PointerType pointer = media_values.PrimaryPointerType();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kPointer, pointer);
 
   if (!value.IsValid()) {
     return pointer != PointerType::kPointerNone;
@@ -1066,11 +994,6 @@
   UseCounter::Count(media_values.GetDocument(),
                     WebFeature::kPrefersReducedMotionMediaFeature);
 
-  MaybeRecordMediaFeatureValue(
-      media_values,
-      IdentifiableSurface::MediaFeatureName::kPrefersReducedMotion,
-      media_values.PrefersReducedMotion());
-
   // If the value is not valid, this was passed without an argument. In that
   // case, it implicitly resolves to 'reduce'.
   if (!value.IsValid()) {
@@ -1091,9 +1014,6 @@
     const MediaValues& media_values) {
   UseCounter::Count(media_values.GetDocument(),
                     WebFeature::kPrefersReducedDataMediaFeature);
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kPrefersReducedData,
-      media_values.PrefersReducedData());
 
   if (!value.IsValid()) {
     return media_values.PrefersReducedData();
@@ -1113,10 +1033,6 @@
     const MediaValues& media_values) {
   UseCounter::Count(media_values.GetDocument(),
                     WebFeature::kPrefersReducedTransparencyMediaFeature);
-  MaybeRecordMediaFeatureValue(
-      media_values,
-      IdentifiableSurface::MediaFeatureName::kPrefersReducedTransparency,
-      media_values.PrefersReducedTransparency());
 
   if (!value.IsValid()) {
     return media_values.PrefersReducedTransparency();
@@ -1134,9 +1050,6 @@
                                        MediaQueryOperator,
                                        const MediaValues& media_values) {
   int available_pointers = media_values.AvailablePointerTypes();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kAnyPointer,
-      available_pointers);
 
   if (!value.IsValid()) {
     return available_pointers & ~static_cast<int>(PointerType::kPointerNone);
@@ -1163,10 +1076,6 @@
 static bool ScanMediaFeatureEval(const MediaQueryExpValue& value,
                                  MediaQueryOperator,
                                  const MediaValues& media_values) {
-  MaybeRecordMediaFeatureValue(media_values,
-                               IdentifiableSurface::MediaFeatureName::kScan,
-                               media_values.MediaType().Utf8());
-
   // Scan only applies to 'tv' media.
   if (!EqualIgnoringASCIICase(media_values.MediaType(),
                               media_type_names::kTv)) {
@@ -1205,8 +1114,6 @@
          value.Id() == CSSValueID::kRec2020);
 
   ColorSpaceGamut gamut = media_values.ColorGamut();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kColorGamut, gamut);
 
   switch (gamut) {
     case ColorSpaceGamut::kUnknown:
@@ -1239,9 +1146,6 @@
                     WebFeature::kPrefersColorSchemeMediaFeature);
 
   auto preferred_scheme = media_values.GetPreferredColorScheme();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kPrefersColorScheme,
-      preferred_scheme);
 
   if (!value.IsValid()) {
     return true;
@@ -1264,9 +1168,6 @@
                     WebFeature::kPrefersContrastMediaFeature);
 
   auto preferred_contrast = media_values.GetPreferredContrast();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kPrefersContrast,
-      preferred_contrast);
 
   if (!value.IsValid()) {
     return preferred_contrast != mojom::blink::PreferredContrast::kNoPreference;
@@ -1298,9 +1199,6 @@
                     WebFeature::kForcedColorsMediaFeature);
 
   ForcedColors forced_colors = media_values.GetForcedColors();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kForcedColors,
-      forced_colors);
 
   if (!value.IsValid()) {
     return forced_colors != ForcedColors::kNone;
@@ -1322,9 +1220,6 @@
     MediaQueryOperator,
     const MediaValues& media_values) {
   NavigationControls navigation_controls = media_values.GetNavigationControls();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kNavigationControls,
-      navigation_controls);
 
   if (!value.IsValid()) {
     return navigation_controls != NavigationControls::kNone;
@@ -1351,11 +1246,6 @@
   int horizontal_viewport_segments =
       media_values.GetHorizontalViewportSegments();
 
-  MaybeRecordMediaFeatureValue(
-      media_values,
-      IdentifiableSurface::MediaFeatureName::kHorizontalViewportSegments,
-      horizontal_viewport_segments);
-
   if (!value.IsValid()) {
     return true;
   }
@@ -1374,11 +1264,6 @@
   UseCounter::Count(media_values.GetDocument(), WebFeature::kFoldableAPIs);
   int vertical_viewport_segments = media_values.GetVerticalViewportSegments();
 
-  MaybeRecordMediaFeatureValue(
-      media_values,
-      IdentifiableSurface::MediaFeatureName::kVerticalViewportSegments,
-      vertical_viewport_segments);
-
   if (!value.IsValid()) {
     return true;
   }
@@ -1454,9 +1339,6 @@
   DCHECK(value.IsId());
 
   DevicePostureType device_posture = media_values.GetDevicePosture();
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kDevicePosture,
-      device_posture);
 
   switch (value.Id()) {
     case CSSValueID::kContinuous:
@@ -1643,9 +1525,6 @@
                                            const MediaValues& media_values) {
   UseCounter::Count(media_values.GetDocument(),
                     WebFeature::kInvertedColorsMediaFeature);
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kInvertedColors,
-      media_values.InvertedColors());
 
   if (!value.IsValid()) {
     return media_values.InvertedColors();
@@ -1663,9 +1542,6 @@
                                       const MediaValues& media_values) {
   UseCounter::Count(media_values.GetDocument(),
                     WebFeature::kScriptingMediaFeature);
-  MaybeRecordMediaFeatureValue(
-      media_values, IdentifiableSurface::MediaFeatureName::kScripting,
-      media_values.GetScripting());
 
   if (!value.IsValid()) {
     return media_values.GetScripting() == Scripting::kEnabled;
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator_test.cc b/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
index d8cdec8..dbe40f0 100644
--- a/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
+++ b/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
@@ -8,11 +8,6 @@
 
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/css/forced_colors.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_sample_test_utils.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
-#include "third_party/blink/public/common/privacy_budget/scoped_identifiability_test_sample_collector.h"
 #include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
 #include "third_party/blink/renderer/core/css/media_list.h"
 #include "third_party/blink/renderer/core/css/media_query_exp.h"
@@ -29,7 +24,6 @@
 #include "third_party/blink/renderer/core/html/html_element.h"
 #include "third_party/blink/renderer/core/media_type_names.h"
 #include "third_party/blink/renderer/core/testing/dummy_page_holder.h"
-#include "third_party/blink/renderer/core/testing/page_test_base.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 #include "third_party/blink/renderer/platform/testing/task_environment.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
@@ -1436,379 +1430,6 @@
   }
 }
 
-class MediaQueryEvaluatorIdentifiabilityTest : public PageTestBase {
- public:
-  MediaQueryEvaluatorIdentifiabilityTest()
-      : counts_{.response_for_is_active = true,
-                .response_for_is_anything_blocked = false,
-                .response_for_is_allowed = true} {
-    IdentifiabilityStudySettings::SetGlobalProvider(
-        std::make_unique<CountingSettingsProvider>(&counts_));
-  }
-  ~MediaQueryEvaluatorIdentifiabilityTest() override {
-    IdentifiabilityStudySettings::ResetStateForTesting();
-  }
-
-  test::ScopedIdentifiabilityTestSampleCollector* collector() {
-    return &collector_;
-  }
-
- protected:
-  CallCounts counts_;
-  test::ScopedIdentifiabilityTestSampleCollector collector_;
-  void UpdateAllLifecyclePhases() {
-    GetDocument().View()->UpdateAllLifecyclePhasesForTest();
-  }
-};
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfacePrefersReducedMotion) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media (prefers-reduced-motion: reduce) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(static_cast<int>(
-      IdentifiableSurface::MediaFeatureName::kPrefersReducedMotion)));
-  EXPECT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(
-      entry.metrics.begin()->surface,
-      IdentifiableSurface::FromTypeAndToken(
-          IdentifiableSurface::Type::kMediaFeature,
-          IdentifiableToken(
-              IdentifiableSurface::MediaFeatureName::kPrefersReducedMotion)));
-  EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(false));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfacePrefersReducedTransparency) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media (prefers-reduced-transparency: reduce) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(static_cast<int>(
-      IdentifiableSurface::MediaFeatureName::kPrefersReducedTransparency)));
-  EXPECT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(entry.metrics.begin()->surface,
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kMediaFeature,
-                IdentifiableToken(IdentifiableSurface::MediaFeatureName::
-                                      kPrefersReducedTransparency)));
-  EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(false));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfaceOrientation) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media (orientation: landscape) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kOrientation)));
-  ASSERT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(entry.metrics.begin()->surface,
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kMediaFeature,
-                IdentifiableToken(
-                    IdentifiableSurface::MediaFeatureName::kOrientation)));
-  EXPECT_EQ(entry.metrics.begin()->value,
-            IdentifiableToken(CSSValueID::kLandscape));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfaceCollectOnce) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media (orientation: landscape) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  // Recompute layout twice but expect only one sample.
-  UpdateAllLifecyclePhases();
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kOrientation)));
-  EXPECT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(entry.metrics.begin()->surface,
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kMediaFeature,
-                IdentifiableToken(
-                    IdentifiableSurface::MediaFeatureName::kOrientation)));
-  EXPECT_EQ(entry.metrics.begin()->value,
-            IdentifiableToken(CSSValueID::kLandscape));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfaceDisplayMode) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media all and (display-mode: browser) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kDisplayMode)));
-  EXPECT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(entry.metrics.begin()->surface,
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kMediaFeature,
-                IdentifiableToken(
-                    IdentifiableSurface::MediaFeatureName::kDisplayMode)));
-  EXPECT_EQ(entry.metrics.begin()->value,
-            IdentifiableToken(blink::mojom::DisplayMode::kBrowser));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfaceDisplayState) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media all and (display-state: normal) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kDisplayState)));
-  EXPECT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(entry.metrics.begin()->surface,
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kMediaFeature,
-                IdentifiableToken(
-                    IdentifiableSurface::MediaFeatureName::kDisplayState)));
-  EXPECT_EQ(entry.metrics.begin()->value,
-            IdentifiableToken(ui::mojom::blink::WindowShowState::kDefault));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfaceResizable) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media all and (resizable: true) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kResizable)));
-  EXPECT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(entry.metrics.begin()->surface,
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kMediaFeature,
-                IdentifiableToken(
-                    IdentifiableSurface::MediaFeatureName::kResizable)));
-  EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(true));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfaceForcedColorsHover) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media all and (forced-colors: active) {
-        div { color: green }
-      }
-    </style>
-    <style>
-      @media all and (hover: hover) {
-        div { color: red }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kForcedColors)));
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kHover)));
-  EXPECT_EQ(collector()->entries().size(), 2u);
-
-  auto& entry_forced_colors = collector()->entries().front();
-  EXPECT_EQ(entry_forced_colors.metrics.size(), 1u);
-  EXPECT_EQ(entry_forced_colors.metrics.begin()->surface,
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kMediaFeature,
-                IdentifiableToken(
-                    IdentifiableSurface::MediaFeatureName::kForcedColors)));
-  EXPECT_EQ(entry_forced_colors.metrics.begin()->value,
-            IdentifiableToken(ForcedColors::kNone));
-
-  auto& entry_hover = collector()->entries().back();
-  EXPECT_EQ(entry_hover.metrics.size(), 1u);
-  EXPECT_EQ(
-      entry_hover.metrics.begin()->surface,
-      IdentifiableSurface::FromTypeAndToken(
-          IdentifiableSurface::Type::kMediaFeature,
-          IdentifiableToken(IdentifiableSurface::MediaFeatureName::kHover)));
-  EXPECT_EQ(entry_hover.metrics.begin()->value,
-            IdentifiableToken(mojom::blink::HoverType::kHoverNone));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfaceAspectRatioNormalized) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media all and (min-aspect-ratio: 8/5) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(static_cast<int>(
-      IdentifiableSurface::MediaFeatureName::kAspectRatioNormalized)));
-  EXPECT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(
-      entry.metrics.begin()->surface,
-      IdentifiableSurface::FromTypeAndToken(
-          IdentifiableSurface::Type::kMediaFeature,
-          IdentifiableToken(
-              IdentifiableSurface::MediaFeatureName::kAspectRatioNormalized)));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfaceResolution) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media all and (min-resolution: 72dpi) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kResolution)));
-  EXPECT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(entry.metrics.begin()->surface,
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kMediaFeature,
-                IdentifiableToken(
-                    IdentifiableSurface::MediaFeatureName::kResolution)));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfaceInvertedColors) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media (inverted-colors: inverted) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(static_cast<int>(
-      IdentifiableSurface::MediaFeatureName::kInvertedColors)));
-  EXPECT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(entry.metrics.begin()->surface,
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kMediaFeature,
-                IdentifiableToken(
-                    IdentifiableSurface::MediaFeatureName::kInvertedColors)));
-  EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(false));
-}
-
-TEST_F(MediaQueryEvaluatorIdentifiabilityTest,
-       MediaFeatureIdentifiableSurfaceScripting) {
-  GetDocument().body()->SetInnerHTMLWithoutTrustedTypes(R"HTML(
-    <style>
-      @media (scripting: enabled) {
-        div { color: green }
-      }
-    </style>
-    <div id="green"></div>
-    <span></span>
-  )HTML");
-
-  UpdateAllLifecyclePhases();
-  EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kScripting)));
-  EXPECT_EQ(collector()->entries().size(), 1u);
-
-  auto& entry = collector()->entries().front();
-  EXPECT_EQ(entry.metrics.size(), 1u);
-  EXPECT_EQ(entry.metrics.begin()->surface,
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kMediaFeature,
-                IdentifiableToken(
-                    IdentifiableSurface::MediaFeatureName::kScripting)));
-  EXPECT_EQ(entry.metrics.begin()->value, IdentifiableToken(Scripting::kNone));
-}
-
 TEST(MediaQueryEvaluatorTest, TestQueriesWithUndefinedCustomMedias) {
   MediaValuesCached::MediaValuesCachedData data;
   auto* media_values = MakeGarbageCollected<MediaValuesCached>(data);
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.cc b/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.cc
index b099c7e..047a9ac 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.cc
+++ b/third_party/blink/renderer/core/css/parser/css_parser_fast_paths.cc
@@ -1617,7 +1617,6 @@
     case CSSPropertyID::kRubyPosition:
       return value_id == CSSValueID::kOver || value_id == CSSValueID::kUnder;
     case CSSPropertyID::kTextAutospace:
-      DCHECK(RuntimeEnabledFeatures::CSSTextAutoSpaceEnabled());
       return value_id == CSSValueID::kNormal ||
              value_id == CSSValueID::kNoAutospace;
     case CSSPropertyID::kTextSpacingTrim:
diff --git a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
index db3fe3e..29b55f0 100644
--- a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
+++ b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
@@ -194,6 +194,12 @@
     CSSParserTokenStream& stream,
     const CSSParserContext& context,
     const CSSParserLocalContext&) const {
+  if (RuntimeEnabledFeatures::CSSPositionAnchorNoneEnabled()) {
+    if (CSSValue* value =
+            css_parsing_utils::ConsumeIdent<CSSValueID::kNone>(stream)) {
+      return value;
+    }
+  }
   if (CSSValue* value =
           css_parsing_utils::ConsumeIdent<CSSValueID::kAuto>(stream)) {
     return value;
@@ -209,6 +215,8 @@
 
   const StylePositionAnchor& position_anchor = style.PositionAnchor();
   switch (position_anchor.GetType()) {
+    case Type::kNone:
+      return CSSIdentifierValue::Create(CSSValueID::kNone);
     case Type::kAuto:
       return CSSIdentifierValue::Create(CSSValueID::kAuto);
     case Type::kName:
diff --git a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
index de6204c..519140c5 100644
--- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
@@ -2186,6 +2186,9 @@
     const CSSValue& value) {
   DCHECK(value.IsScopedValue());
   if (const auto* identifier_value = DynamicTo<CSSIdentifierValue>(value)) {
+    if (identifier_value->GetValueID() == CSSValueID::kNone) {
+      return StylePositionAnchor(StylePositionAnchor::Type::kNone);
+    }
     DCHECK_EQ(identifier_value->GetValueID(), CSSValueID::kAuto);
     return StylePositionAnchor(StylePositionAnchor::Type::kAuto);
   }
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
index 8f6a4e5..d2a4e89f5 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
@@ -4200,6 +4200,7 @@
   set_sheet_text(R"HTML(
     #div::before {
       content: "";
+      position-anchor: auto;
       position-area: top left;
       left: anchor(right);
     }
@@ -4211,6 +4212,7 @@
     #div::before {
       content: "";
       position: absolute;
+      position-anchor: auto;
       position-anchor: --a;
       position-area: top left;
       left: anchor(right);
@@ -4222,6 +4224,7 @@
   set_sheet_text(R"HTML(
     #div::before {
       position: absolute;
+      position-anchor: auto;
       position-area: top left;
       left: anchor(right);
     }
@@ -4233,6 +4236,7 @@
     #div::before {
       content: "";
       position: absolute;
+      position-anchor: auto;
       justify-self: anchor-center;
     }
   )HTML");
@@ -4243,6 +4247,7 @@
     #div::before {
       content: "";
       position: fixed;
+      position-anchor: auto;
       position-area: inline-start;
     }
   )HTML");
@@ -4253,6 +4258,7 @@
     #div::before {
       content: "";
       position: fixed;
+      position-anchor: auto;
       top: anchor(bottom);
     }
   )HTML");
@@ -4264,10 +4270,26 @@
     #div::before {
       content: "";
       position: absolute;
+      position-anchor: auto;
       top: anchor(--a bottom);
     }
   )HTML");
   EXPECT_TRUE(IsUseCounted(WebFeature::kCSSPseudoElementUsesImplicitAnchor));
+
+  // If position-anchor is initial, we aren't using the implicit anchor (with
+  // the CSSPositionAnchorNone feature enabled).
+  set_sheet_text(R"HTML(
+    #div::before {
+      content: "";
+      position: absolute;
+      left: anchor(right);
+    }
+  )HTML");
+  if (RuntimeEnabledFeatures::CSSPositionAnchorNoneEnabled()) {
+    EXPECT_FALSE(IsUseCounted(WebFeature::kCSSPseudoElementUsesImplicitAnchor));
+  } else {
+    EXPECT_TRUE(IsUseCounted(WebFeature::kCSSPseudoElementUsesImplicitAnchor));
+  }
 }
 
 TEST_F(StyleResolverTest, FindContainerForElement_LayoutSiblings) {
diff --git a/third_party/blink/renderer/core/css/transition_scoped.css b/third_party/blink/renderer/core/css/transition_scoped.css
index 7170c0ea..ffdb0e52 100644
--- a/third_party/blink/renderer/core/css/transition_scoped.css
+++ b/third_party/blink/renderer/core/css/transition_scoped.css
@@ -10,21 +10,11 @@
 
 @namespace "http://www.w3.org/1999/xhtml";
 
-:root::view-transition {
+::view-transition {
   position: absolute;
   inset: 0;
 }
 
-:not(:root)::view-transition {
-  position: absolute;
-  position-anchor: auto;
-  left: anchor(left);
-  top: anchor(top);
-  width: anchor-size(width);
-  height: anchor-size(height);
-  overflow: clip;
-}
-
 ::view-transition-group(*) {
   position: absolute;
   top: 0;
diff --git a/third_party/blink/renderer/core/dom/abort_signal_registry.cc b/third_party/blink/renderer/core/dom/abort_signal_registry.cc
index 62d70f4..76320c4 100644
--- a/third_party/blink/renderer/core/dom/abort_signal_registry.cc
+++ b/third_party/blink/renderer/core/dom/abort_signal_registry.cc
@@ -22,8 +22,7 @@
 }
 
 AbortSignalRegistry::AbortSignalRegistry(ExecutionContext& context)
-    : ExecutionContextLifecycleObserver(&context),
-      execution_context_(context) {}
+    : ExecutionContextLifecycleObserver(&context) {}
 
 AbortSignalRegistry::~AbortSignalRegistry() = default;
 
@@ -31,7 +30,6 @@
   visitor->Trace(event_listener_signals_);
   visitor->Trace(signals_registered_for_abort_);
   visitor->Trace(signals_registered_for_priority_);
-  visitor->Trace(execution_context_);
   ExecutionContextLifecycleObserver::Trace(visitor);
 }
 
diff --git a/third_party/blink/renderer/core/dom/abort_signal_registry.h b/third_party/blink/renderer/core/dom/abort_signal_registry.h
index b04146ce..9b43c990 100644
--- a/third_party/blink/renderer/core/dom/abort_signal_registry.h
+++ b/third_party/blink/renderer/core/dom/abort_signal_registry.h
@@ -48,8 +48,6 @@
   void ContextDestroyed() override;
 
  private:
-  Member<ExecutionContext> execution_context_;
-
   // Map holding abort algorithm handlers for event listeners that have them,
   // tying the lifetime of the abort algorithm to the `EventListener`. This is
   // cleared when context is destroyed since we won't run event listeners after
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index c0baba5c..0c67a8ed 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -8568,14 +8568,6 @@
   return *data_->email_regexp_;
 }
 
-void Document::SetMediaFeatureEvaluated(int feature) {
-  evaluated_media_features_ |= (1 << feature);
-}
-
-bool Document::WasMediaFeatureEvaluated(int feature) {
-  return (evaluated_media_features_ >> feature) & 1;
-}
-
 void Document::AddConsoleMessage(ConsoleMessage* message,
                                  bool discard_duplicates) const {
   // Don't let non-attached Documents spam the console.
@@ -10341,8 +10333,6 @@
   return nullptr;
 }
 
-template class CORE_TEMPLATE_EXPORT Supplement<Document>;
-
 }  // namespace blink
 
 #ifndef NDEBUG
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h
index d6fff65b..858dc737 100644
--- a/third_party/blink/renderer/core/dom/document.h
+++ b/third_party/blink/renderer/core/dom/document.h
@@ -419,11 +419,6 @@
 
   void MediaQueryAffectingValueChanged(MediaValueChange change);
 
-  // SetMediaFeatureEvaluated and WasMediaFeatureEvaluated are used to prevent
-  // UKM sampling of CSS media features more than once per document.
-  void SetMediaFeatureEvaluated(int feature);
-  bool WasMediaFeatureEvaluated(int feature);
-
   using TreeScope::getElementById;
 
   bool IsInitialEmptyDocument() const { return is_initial_empty_document_; }
@@ -2847,10 +2842,6 @@
   // explicitly set.
   mutable std::optional<DocumentToken> token_;
 
-  // Bitfield used for tracking UKM sampling of media features such that each
-  // media feature is sampled only once per document.
-  uint64_t evaluated_media_features_ = 0;
-
   DocumentLifecycle lifecycle_;
 
   bool is_initial_empty_document_;
diff --git a/third_party/blink/renderer/core/dom/document_test.cc b/third_party/blink/renderer/core/dom/document_test.cc
index 3a112e9..ca081ef6 100644
--- a/third_party/blink/renderer/core/dom/document_test.cc
+++ b/third_party/blink/renderer/core/dom/document_test.cc
@@ -333,33 +333,6 @@
   EXPECT_EQ(GetDocument().documentElement()->OffsetWidth(), 800);
 }
 
-// This tests whether we properly set the bits for indicating if a media feature
-// has been evaluated.
-TEST_F(DocumentTest, MediaFeatureEvaluated) {
-  GetDocument().SetMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kForcedColors));
-  for (int i = 0; i < 64; i++) {
-    if (i == static_cast<int>(
-                 IdentifiableSurface::MediaFeatureName::kForcedColors)) {
-      EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(i));
-    } else {
-      EXPECT_FALSE(GetDocument().WasMediaFeatureEvaluated(i));
-    }
-  }
-  GetDocument().SetMediaFeatureEvaluated(
-      static_cast<int>(IdentifiableSurface::MediaFeatureName::kAnyHover));
-  for (int i = 0; i < 64; i++) {
-    if ((i == static_cast<int>(
-                  IdentifiableSurface::MediaFeatureName::kForcedColors)) ||
-        (i ==
-         static_cast<int>(IdentifiableSurface::MediaFeatureName::kAnyHover))) {
-      EXPECT_TRUE(GetDocument().WasMediaFeatureEvaluated(i));
-    } else {
-      EXPECT_FALSE(GetDocument().WasMediaFeatureEvaluated(i));
-    }
-  }
-}
-
 // This test checks that Documunt::linkManifest() returns a value conform to the
 // specification.
 TEST_F(DocumentTest, LinkManifest) {
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 35151df..a2828b6 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -4707,10 +4707,8 @@
   // originating element's box and cannot be skipped if the originating element
   // is a size container because the pseudo-element and its box need to be
   // created before layout.
-  // The same applies to scoped view-transitions.
   if (!style.ScrollMarkerGroupNone() ||
       CanGeneratePseudoElement(kPseudoIdScrollButton) ||
-      CanGeneratePseudoElement(kPseudoIdViewTransition) ||
       HasSiblingBoxPseudoElements()) {
     return false;
   }
@@ -5721,25 +5719,16 @@
 }
 
 void Element::AttachTransitionPseudoElements(AttachContext& context) {
-  ViewTransition* transition = ViewTransitionUtils::GetTransition(*this);
-  if (!transition) {
-    return;
-  }
-
+  // For a document transition, the LayoutObject for the ::view-transition
+  // pseudo-element is wrapped by the anonymous LayoutViewTransitionRoot,
+  // which represents the snapshot containing block.
+  //
+  // The LayoutViewTransitionRoot is a child of the LayoutView, and will be
+  // injected by LayoutView::AddChild.
   // See LayoutTreeBuilderTraversal::ParentLayoutObject.
   AttachContext children_context(context);
   if (context.parent && context.parent->IsDocumentElement()) {
-    // For a document transition, the LayoutObject for the ::view-transition
-    // pseudo-element is wrapped by the anonymous LayoutViewTransitionRoot,
-    // which represents the snapshot containing block.
-    //
-    // The LayoutViewTransitionRoot is a child of the LayoutView, and will be
-    // injected by LayoutView::AddChild.
     children_context.parent = GetDocument().GetLayoutView();
-  } else if (GetLayoutObject() && transition->Scope() == this) {
-    // The layout object for the ::view-transition() pseudo is a sibling
-    // of the scoped elements layout object.
-    children_context.parent = GetLayoutObject()->Parent();
   }
 
   auto attach_pseudo = [&](PseudoElement* pseudo_element) {
@@ -8421,6 +8410,16 @@
   return false;
 }
 
+bool Element::ShouldHighlightAd() const {
+  if (const ElementRareDataVector* data = GetElementRareData()) {
+    if (const DisplayAdElementMonitor* monitor =
+            data->GetDisplayAdElementMonitor()) {
+      return monitor->ShouldHighlight();
+    }
+  }
+  return false;
+}
+
 bool Element::HasUndoStack() const {
   if (const ElementRareDataVector* data = GetElementRareData()) {
     return data->HasUndoStack();
@@ -9883,8 +9882,13 @@
 
   PseudoElement* pseudo_element =
       PseudoElement::Create(this, pseudo_id, pseudo_argument);
-  CHECK(pseudo_element);
-
+  if (RuntimeEnabledFeatures::ScopedViewTransitionsEnabled()) {
+    if (!pseudo_element) {
+      // TODO(crbug.com/405117185): Replace with DCHECK(pseudo_element) once we
+      // properly track per-scope view transition names.
+      return nullptr;
+    }
+  }
   EnsureElementRareData().SetPseudoElement(pseudo_id, pseudo_element,
                                            pseudo_argument);
   pseudo_element->InsertedInto(*this);
@@ -10369,8 +10373,7 @@
   for (PseudoId pseudo_id :
        {kPseudoIdScrollButtonBlockStart, kPseudoIdScrollButtonInlineStart,
         kPseudoIdScrollButtonInlineEnd, kPseudoIdScrollButtonBlockEnd,
-        kPseudoIdScrollMarkerGroupAfter, kPseudoIdScrollMarkerGroupBefore,
-        kPseudoIdViewTransition}) {
+        kPseudoIdScrollMarkerGroupAfter, kPseudoIdScrollMarkerGroupBefore}) {
     if (rare_data->GetPseudoElement(pseudo_id)) {
       return true;
     }
@@ -12088,7 +12091,6 @@
     }
 
     bool had_transition_pseudo = !!GetPseudoElement(kPseudoIdViewTransition);
-
     PseudoElement* transition_pseudo =
         UpdatePseudoElement(kPseudoIdViewTransition, style_recalc_change,
                             style_recalc_context, g_null_atom);
@@ -12877,15 +12879,6 @@
         }
         return pseudo_element->UltimateOriginatingElement()
             .ImplicitAnchorElement();
-
-      case kPseudoIdViewTransition: {
-        Element* parent = parentElement();
-        if (!parent->IsDocumentElement()) {
-          return parent;
-        }
-        break;
-      }
-
       default:
         return nullptr;
     }
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h
index 91c5fdfc..6dae55955 100644
--- a/third_party/blink/renderer/core/dom/element.h
+++ b/third_party/blink/renderer/core/dom/element.h
@@ -1697,13 +1697,24 @@
 
   // Manages the element's ad-related status.
   //
-  // `HTMLFrameOwnerElement` manages its ad status separately. Therefore:
-  // 1. `SetIsAdRelated()` should not be called on a frame owner.
-  // 2. `IsAdRelated()` is overridden by `HTMLFrameOwnerElement` to return its
-  //    own frame-derived status.
+  // NOTE: `HTMLFrameOwnerElement` manages its ad status separately by
+  // deriving it from its frame. It overrides these virtual methods, and
+  // `SetIsAdRelated()` should not be called on it directly.
+
+  // Marks this element as being ad-related.
   void SetIsAdRelated();
+
+  // Returns true if the element is considered ad-related.
   virtual bool IsAdRelated() const;
 
+  // Returns true if a paint-time ad highlight should be drawn.
+  // This is the authoritative check for painters, encapsulating:
+  // 1. The element's ad status (i.e., `IsAdRelated()`).
+  // 2. The "Highlight ads" DevTools setting.
+  // 3. Logic to exclude nested ads (e.g., in an ad iframe) to avoid redundant,
+  // overlapping highlights.
+  virtual bool ShouldHighlightAd() const;
+
   void NotifyInlineStyleMutation();
 
   // For undo stack cleanup
diff --git a/third_party/blink/renderer/core/dom/element.idl b/third_party/blink/renderer/core/dom/element.idl
index d1ef0ce8..f56d3be5 100644
--- a/third_party/blink/renderer/core/dom/element.idl
+++ b/third_party/blink/renderer/core/dom/element.idl
@@ -177,7 +177,6 @@
     [CEReactions, Reflect=elementtiming] attribute DOMString elementTiming;
     [RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming] attribute DOMString containerTiming;
     [RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming-ignore] attribute boolean containerTimingIgnore;
-    [RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming-nesting] attribute DOMString containerTimingNesting;
 
     // Heading Offset
     [CEReactions, RuntimeEnabled=HeadingOffset] attribute unsigned long headingOffset;
diff --git a/third_party/blink/renderer/core/dom/layout_tree_builder.cc b/third_party/blink/renderer/core/dom/layout_tree_builder.cc
index 14246f8..62f036a 100644
--- a/third_party/blink/renderer/core/dom/layout_tree_builder.cc
+++ b/third_party/blink/renderer/core/dom/layout_tree_builder.cc
@@ -73,11 +73,6 @@
     // LayoutView. Otherwise, this returns nullptr and we're at the end.
     return node_->GetDocument().GetLayoutView()->GetViewTransitionRoot();
   }
-
-  if (node_->IsViewTransitionPseudoElement()) {
-    return nullptr;
-  }
-
   return LayoutTreeBuilder::NextLayoutObject();
 }
 
@@ -96,16 +91,6 @@
         LayoutTreeBuilderTraversal::LayoutParent(*node_->parentElement());
     DCHECK_EQ(parent_element->GetLayoutObject(), context_.parent);
   }
-
-  // Box for a scoped view-transition is a sibling of its originating element's
-  // layout box.
-  if (node_->GetPseudoId() == kPseudoIdViewTransition) {
-    const Element& scope =
-        To<PseudoElement>(node_)->UltimateOriginatingElement();
-    if (!scope.IsDocumentElement()) {
-      DCHECK_EQ(scope.GetLayoutObject()->Parent(), context_.parent);
-    }
-  }
 #endif  // DCHECK_IS_ON()
   return context_.parent;
 }
diff --git a/third_party/blink/renderer/core/dom/layout_tree_builder_traversal.cc b/third_party/blink/renderer/core/dom/layout_tree_builder_traversal.cc
index 3de9556..1beb22dd 100644
--- a/third_party/blink/renderer/core/dom/layout_tree_builder_traversal.cc
+++ b/third_party/blink/renderer/core/dom/layout_tree_builder_traversal.cc
@@ -103,9 +103,8 @@
       return node.GetDocument().GetLayoutView();
     }
     // For a scoped transition, the LayoutObject for the ::view-transition
-    // is a sibling of the layoutObject for the scope element.
-    LayoutObject* parent = scope->GetLayoutObject()->Parent();
-    return parent;
+    // pseudo-element is a child of the LayoutObject for the scope element.
+    return scope->GetLayoutObject();
   }
   const Node* search_start_node = &node;
   // Parent of ::scroll-marker-group and ::scroll-button() should be layout
@@ -209,6 +208,16 @@
       }
       if (Node* next = parent_element->GetPseudoElement(kPseudoIdAfter))
         return next;
+      if (Node* next =
+              parent_element->GetPseudoElement(kPseudoIdViewTransition)) {
+        // If parent is a non-root view transition scope, place this child
+        // before the ::view-transition pseudo-element.
+        // If parent is the document element, its ::view-transition is placed
+        // under the LayoutViewTransitionRoot instead.
+        if (!parent_element->IsDocumentElement()) {
+          return next;
+        }
+      }
       [[fallthrough]];
     case kPseudoIdAfter:
       if (Node* next = parent_element->GetPseudoElement(kPseudoIdPickerIcon)) {
diff --git a/third_party/blink/renderer/core/dom/pseudo_element.cc b/third_party/blink/renderer/core/dom/pseudo_element.cc
index 2a5d5df5..f5f0047 100644
--- a/third_party/blink/renderer/core/dom/pseudo_element.cc
+++ b/third_party/blink/renderer/core/dom/pseudo_element.cc
@@ -379,8 +379,7 @@
          pseudo_id == kPseudoIdScrollButton ||
          pseudo_id == kPseudoIdScrollMarkerGroup ||
          pseudo_id == kPseudoIdScrollMarkerGroupAfter ||
-         pseudo_id == kPseudoIdScrollMarkerGroupBefore ||
-         pseudo_id == kPseudoIdViewTransition;
+         pseudo_id == kPseudoIdScrollMarkerGroupBefore;
 }
 
 bool PseudoElement::IsLayoutSiblingOfOriginatingElement() const {
diff --git a/third_party/blink/renderer/core/editing/commands/clipboard_commands.cc b/third_party/blink/renderer/core/editing/commands/clipboard_commands.cc
index 5e5b67c3..c6e1fcc 100644
--- a/third_party/blink/renderer/core/editing/commands/clipboard_commands.cc
+++ b/third_party/blink/renderer/core/editing/commands/clipboard_commands.cc
@@ -74,16 +74,15 @@
       ExecutionContextClipboardEventState* supplement =
           execution_context.GetExecutionContextClipboardEventState();
       if (!supplement) {
-        supplement = MakeGarbageCollected<ExecutionContextClipboardEventState>(
-            execution_context);
+        supplement =
+            MakeGarbageCollected<ExecutionContextClipboardEventState>();
         execution_context.SetExecutionContextClipboardEventState(supplement);
       }
       return *supplement;
     }
   }
 
-  ExecutionContextClipboardEventState(ExecutionContext& execution_context)
-      : execution_context_(execution_context) {}
+  ExecutionContextClipboardEventState() = default;
   virtual ~ExecutionContextClipboardEventState() = default;
 
   struct State {
@@ -101,12 +100,9 @@
 
   const State& GetState() const { return state_; }
 
-  void Trace(Visitor* visitor) const override {
-    visitor->Trace(execution_context_);
-  }
+  void Trace(Visitor* visitor) const override {}
 
  private:
-  Member<ExecutionContext> execution_context_;
   State state_;
 };
 
diff --git a/third_party/blink/renderer/core/execution_context/navigator_base.h b/third_party/blink/renderer/core/execution_context/navigator_base.h
index aed72d4..cf3eced 100644
--- a/third_party/blink/renderer/core/execution_context/navigator_base.h
+++ b/third_party/blink/renderer/core/execution_context/navigator_base.h
@@ -55,8 +55,7 @@
 class GlobalFetchImpl;
 
 // NavigatorBase is a helper for shared logic between Navigator and
-// WorkerNavigator. It is also a Supplementable, and can therefore be used for
-// classes that need to Supplement both Navigator and WorkerNavigator.
+// WorkerNavigator.
 class CORE_EXPORT NavigatorBase : public ScriptWrappable,
                                   public NavigatorConcurrentHardware,
                                   public NavigatorDeviceMemory,
diff --git a/third_party/blink/renderer/core/execution_context/window_agent.h b/third_party/blink/renderer/core/execution_context/window_agent.h
index 871d09c..d2718148 100644
--- a/third_party/blink/renderer/core/execution_context/window_agent.h
+++ b/third_party/blink/renderer/core/execution_context/window_agent.h
@@ -51,8 +51,6 @@
   AgentGroupScheduler& GetAgentGroupScheduler();
 
  private:
-  // Note clients may attach per-agent data via Supplementable.
-  // MutationObservers are attached this way.
   // TODO(keishi): Move per-agent data here with the correct granularity.
   // E.g. CustomElementReactionStack should move here.
   Member<AgentGroupScheduler> agent_group_scheduler_;
diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.cc b/third_party/blink/renderer/core/exported/web_settings_impl.cc
index 6a620132..96882b47 100644
--- a/third_party/blink/renderer/core/exported/web_settings_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_settings_impl.cc
@@ -796,6 +796,10 @@
   settings_->SetSelectionClipboardBufferAvailable(available);
 }
 
+void WebSettingsImpl::SetMiddleClickPasteAllowed(bool allowed) {
+  settings_->SetMiddleClickPasteAllowed(allowed);
+}
+
 void WebSettingsImpl::SetAccessibilityIncludeSvgGElement(bool include) {
   settings_->SetAccessibilityIncludeSvgGElement(include);
 }
diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.h b/third_party/blink/renderer/core/exported/web_settings_impl.h
index 50bf554f..1e2841f 100644
--- a/third_party/blink/renderer/core/exported/web_settings_impl.h
+++ b/third_party/blink/renderer/core/exported/web_settings_impl.h
@@ -232,6 +232,7 @@
 
   void SetAriaModalPrunesAXTree(bool) override;
   void SetSelectionClipboardBufferAvailable(bool) override;
+  void SetMiddleClickPasteAllowed(bool) override;
   void SetAccessibilityIncludeSvgGElement(bool) override;
   void SetWebXRImmersiveArAllowed(bool webxr_immersive_ar_allowed) override;
   void SetModalContextMenu(bool) override;
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc
index fa8cdb9a..451d0a2 100644
--- a/third_party/blink/renderer/core/exported/web_view_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -3608,6 +3608,11 @@
       renderer_preferences_.selection_clipboard_buffer_available);
 #endif  // BUILDFLAG(IS_OZONE)
 
+#if BUILDFLAG(IS_LINUX)
+  GetSettings()->SetMiddleClickPasteAllowed(
+      renderer_preferences_.middle_click_paste_allowed);
+#endif  // BUILDFLAG(IS_LINUX)
+
   SetExplicitlyAllowedPorts(
       renderer_preferences_.explicitly_allowed_network_ports);
 
diff --git a/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.cc b/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.cc
index 58998351f..a4452ae 100644
--- a/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.cc
+++ b/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.cc
@@ -49,7 +49,6 @@
 FileBackedBlobFactoryDispatcher::FileBackedBlobFactoryDispatcher(
     ExecutionContext& context)
     : ExecutionContextClient(&context),
-      execution_context_(context),
       frame_remote_(&context),
       worker_remote_(&context) {}
 
@@ -85,7 +84,6 @@
 }
 
 void FileBackedBlobFactoryDispatcher::Trace(Visitor* visitor) const {
-  visitor->Trace(execution_context_);
   ExecutionContextClient::Trace(visitor);
   visitor->Trace(frame_remote_);
   visitor->Trace(worker_remote_);
diff --git a/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.h b/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.h
index 127ded1..5f16325 100644
--- a/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.h
+++ b/third_party/blink/renderer/core/fileapi/file_backed_blob_factory_dispatcher.h
@@ -42,8 +42,6 @@
 
   mojom::blink::FileBackedBlobFactory* GetFileBackedBlobFactory();
 
-  Member<ExecutionContext> execution_context_;
-
   HeapMojoAssociatedRemote<mojom::blink::FileBackedBlobFactory> frame_remote_;
 
   HeapMojoRemote<mojom::blink::FileBackedBlobFactory> worker_remote_;
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
index 3805db6..c22ff12 100644
--- a/third_party/blink/renderer/core/frame/local_frame.cc
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -402,8 +402,6 @@
 
 }  // namespace
 
-template class CORE_TEMPLATE_EXPORT Supplement<LocalFrame>;
-
 // static
 LocalFrame* LocalFrame::FromFrameToken(const LocalFrameToken& frame_token) {
   LocalFramesByTokenMap& local_frames_map = GetLocalFramesMap();
@@ -2780,8 +2778,12 @@
 }
 
 void LocalFrame::UpdateAdHighlight() {
-  if (IsMainFrame() && !IsInFencedFrameTree())
+  // Ad highlighting is now primarily handled by `BoxFragmentPainter` on the
+  // owner element. We retain this legacy path solely for fenced frame trees, as
+  // a <fencedframe> owner element does not know its ad status.
+  if (!IsInFencedFrameTree()) {
     return;
+  }
 
   // TODO(bokan): Fenced frames may need some work to propagate the ad
   // highlighting setting to the inner tree.
diff --git a/third_party/blink/renderer/core/frame/mhtml_archive_test.cc b/third_party/blink/renderer/core/frame/mhtml_archive_test.cc
index 0d4a686..a818b1d 100644
--- a/third_party/blink/renderer/core/frame/mhtml_archive_test.cc
+++ b/third_party/blink/renderer/core/frame/mhtml_archive_test.cc
@@ -195,10 +195,6 @@
     ASSERT_TRUE(archive);
 
     EXPECT_EQ(archive->LoadResult(), expected_result);
-
-    // Check that the correct count, and only the correct count, increased.
-    histogram_tester.ExpectUniqueSample(
-        "PageSerialization.MhtmlLoading.LoadResult", expected_result, 1);
   }
 
  private:
diff --git a/third_party/blink/renderer/core/frame/settings.json5 b/third_party/blink/renderer/core/frame/settings.json5
index 4f04a3e..4cb118e 100644
--- a/third_party/blink/renderer/core/frame/settings.json5
+++ b/third_party/blink/renderer/core/frame/settings.json5
@@ -1206,6 +1206,10 @@
       initial: false,
     },
     {
+      name: "middleClickPasteAllowed",
+      initial: true
+    },
+    {
       name: "accessibilityIncludeSvgGElement",
       initial: false,
     },
diff --git a/third_party/blink/renderer/core/frame/web_frame_test.cc b/third_party/blink/renderer/core/frame/web_frame_test.cc
index ff9551a7..5c0d13c 100644
--- a/third_party/blink/renderer/core/frame/web_frame_test.cc
+++ b/third_party/blink/renderer/core/frame/web_frame_test.cc
@@ -9669,48 +9669,6 @@
   EXPECT_EQ("  \n\nhello\n\nb \n\na\n\nc", content);
 }
 
-// Asserts that the `Settings::SetHighlightAds` is properly applied to a
-// `LocalFrame` even if `Settings::SetHighlightAds` is fired when the
-// `LocalFrame` is still provisional. See crbug/1312107. While the bug is first
-// observed on fenced frames, the underlying issue lies in the timing of the
-// `Settings::SetHighlightAds` call with respect to the navigation progress of
-// the frame.
-TEST_F(WebFrameSwapTest, AdHighlightEarlyApply) {
-  WebRemoteFrame* remote_frame = frame_test_helpers::CreateRemote();
-  SwapAndVerifyFirstChildConsistency("local->remote", MainFrame(),
-                                     remote_frame);
-
-  // Create the provisional frame and set its ad evidence.
-  WebLocalFrameImpl* local_frame =
-      web_view_helper_.CreateProvisional(*remote_frame);
-  // Value of `parent_is_ad` does not matter.
-  blink::FrameAdEvidence ad_evidence(/*parent_is_ad=*/false);
-  ad_evidence.set_created_by_ad_script(
-      mojom::FrameCreationStackEvidence::kCreatedByAdScript);
-  ad_evidence.set_is_complete();
-  local_frame->SetAdEvidence(ad_evidence);
-
-  // Toggle the settings for provisional local frame.
-  local_frame->View()->GetSettings()->SetHighlightAds(true);
-
-  // Assert that the local frame does not have any overlay color since it is not
-  // in the frame tree yet.
-  ASSERT_EQ(local_frame->GetFrame()->GetFrameOverlayColor(), std::nullopt);
-
-  WebDocument doc_before_navigation = local_frame->GetDocument();
-
-  auto params = std::make_unique<WebNavigationParams>();
-  params->url = url_test_helpers::ToKURL("about:blank");
-  // `CommitNavigation` will swap in the local frame to replace the remote
-  // frame.
-  local_frame->CommitNavigation(std::move(params), nullptr);
-
-  ASSERT_FALSE(local_frame->IsProvisional());
-  ASSERT_NE(doc_before_navigation, local_frame->GetDocument());
-  ASSERT_EQ(local_frame->GetFrame()->GetFrameOverlayColor(),
-            SkColorSetARGB(128, 255, 0, 0));
-}
-
 // TODO(crbug.com/1314493): This test is flaky.
 TEST_F(WebFrameSwapTest, DISABLED_DoNotPropagateDisplayNonePropertyOnSwap) {
   WebFrameSwapTestClient* main_frame_client =
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
index 4ae808c..6b1c447c 100644
--- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
+++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
@@ -9,9 +9,6 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/trace_event/typed_macros.h"
 #include "build/build_config.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metrics.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
@@ -147,7 +144,6 @@
     ToBlobFunctionType function_type,
     base::TimeTicks start_time,
     ExecutionContext* context,
-    const IdentifiableToken& input_digest,
     ScriptPromiseResolver<Blob>* resolver)
     : CanvasAsyncBlobCreator(image,
                              options,
@@ -155,7 +151,6 @@
                              nullptr,
                              start_time,
                              context,
-                             input_digest,
                              resolver) {}
 
 CanvasAsyncBlobCreator::CanvasAsyncBlobCreator(
@@ -165,7 +160,6 @@
     V8BlobCallback* callback,
     base::TimeTicks start_time,
     ExecutionContext* context,
-    const IdentifiableToken& input_digest,
     ScriptPromiseResolver<Blob>* resolver)
     : fail_encoder_initialization_for_test_(false),
       enforce_idle_encoding_for_test_(false),
@@ -173,7 +167,6 @@
       function_type_(function_type),
       start_time_(start_time),
       static_bitmap_image_loaded_(false),
-      input_digest_(input_digest),
       callback_(callback),
       script_promise_resolver_(resolver) {
   CHECK(context);
@@ -469,42 +462,6 @@
                                 image_->width(), image_->height());
 
   TraceCanvasContent(&encoded_image);
-  if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-          blink::IdentifiableSurface::Type::kCanvasReadback)) {
-    // Creating this ImageDataBuffer has some overhead, namely getting the
-    // SkImage and computing the pixmap. We need the StaticBitmapImage to be
-    // deleted on the same thread on which it was created, so we use the same
-    // TaskType here in order to get the same TaskRunner.
-
-    // TODO(crbug.com/1143737) WrapPersistent(this) stores more data than is
-    // needed by the function. It would be good to find a way to wrap only the
-    // objects needed (image_, ukm_source_id_, input_digest_, context_)
-    context_->GetTaskRunner(TaskType::kCanvasBlobSerialization)
-        ->PostTask(
-            FROM_HERE,
-            BindOnce(&CanvasAsyncBlobCreator::RecordIdentifiabilityMetric,
-                     WrapPersistent(this)));
-  } else {
-    // RecordIdentifiabilityMetric needs a reference to image_, and will run
-    // dispose itself. So here we only call dispose if not recording the metric.
-    Dispose();
-  }
-}
-
-void CanvasAsyncBlobCreator::RecordIdentifiabilityMetric() {
-  std::unique_ptr<ImageDataBuffer> data_buffer =
-      ImageDataBuffer::Create(image_);
-
-  if (data_buffer) {
-    blink::IdentifiabilityMetricBuilder(context_->UkmSourceID())
-        .Add(blink::IdentifiableSurface::FromTypeAndToken(
-                 blink::IdentifiableSurface::Type::kCanvasReadback,
-                 input_digest_),
-             blink::IdentifiabilityDigestOfBytes(data_buffer->PixelData()))
-        .Record(context_->UkmRecorder());
-  }
-
-  // Avoid unwanted retention, see dispose().
   Dispose();
 }
 
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h
index 2fbd8de..64efbcbbb 100644
--- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h
+++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.h
@@ -11,7 +11,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_blob_callback.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_image_encode_options.h"
@@ -54,7 +53,6 @@
                          ToBlobFunctionType function_type,
                          base::TimeTicks start_time,
                          ExecutionContext*,
-                         const IdentifiableToken& input_digest,
                          ScriptPromiseResolver<Blob>*);
   CanvasAsyncBlobCreator(scoped_refptr<StaticBitmapImage>,
                          const ImageEncodeOptions*,
@@ -62,7 +60,6 @@
                          V8BlobCallback*,
                          base::TimeTicks start_time,
                          ExecutionContext*,
-                         const IdentifiableToken& input_digest,
                          ScriptPromiseResolver<Blob>* = nullptr);
   virtual ~CanvasAsyncBlobCreator();
 
@@ -115,7 +112,6 @@
   base::TimeTicks start_time_;
   base::TimeTicks schedule_idle_task_start_time_;
   bool static_bitmap_image_loaded_;
-  IdentifiableToken input_digest_;
 
   // Used when CanvasAsyncBlobCreator runs on main thread only
   scoped_refptr<base::SingleThreadTaskRunner> parent_frame_task_runner_;
@@ -147,7 +143,6 @@
   void IdleTaskStartTimeoutEvent(double quality);
   void IdleTaskCompleteTimeoutEvent();
 
-  void RecordIdentifiabilityMetric();
   void TraceCanvasContent(Vector<unsigned char>* encoded_image);
 };
 
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc
index fe59677..013311e 100644
--- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc
+++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc
@@ -38,7 +38,6 @@
             nullptr,
             base::TimeTicks(),
             document->GetExecutionContext(),
-            0,
             nullptr) {
     if (fail_encoder_initialization)
       fail_encoder_initialization_for_test_ = true;
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h
index 991c58a..8e7e283 100644
--- a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h
+++ b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h
@@ -32,7 +32,6 @@
 #include "base/notreached.h"
 #include "cc/paint/paint_flags.h"
 #include "components/viz/common/resources/shared_image_format_utils.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h"
@@ -327,21 +326,8 @@
   void Trace(Visitor*) const override;
   virtual void Stop() = 0;
 
-  virtual IdentifiableToken IdentifiableTextToken() const {
-    // Token representing no bytes.
-    return IdentifiableToken(base::span<const uint8_t>());
-  }
-
-  virtual bool IdentifiabilityEncounteredSkippedOps() const { return false; }
-
-  virtual bool IdentifiabilityEncounteredSensitiveOps() const { return false; }
-
   static CanvasPerformanceMonitor& GetCanvasPerformanceMonitor();
 
-  virtual bool IdentifiabilityEncounteredPartiallyDigestedImage() const {
-    return false;
-  }
-
   bool did_print_in_current_task() const { return did_print_in_current_task_; }
 
  protected:
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc
index a1cfa85..7461905 100644
--- a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc
+++ b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc
@@ -13,7 +13,6 @@
 #include "gpu/command_buffer/common/shared_image_usage.h"
 #include "gpu/config/gpu_feature_info.h"
 #include "third_party/blink/public/common/features.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_image_encode_options.h"
@@ -237,32 +236,6 @@
   return base::ok();
 }
 
-IdentifiableToken CanvasRenderingContextHost::IdentifiabilityInputDigest(
-    const CanvasRenderingContext* const context) const {
-  const uint64_t context_digest =
-      context ? context->IdentifiableTextToken().ToUkmMetricValue() : 0;
-  const uint64_t context_type = static_cast<uint64_t>(
-      context ? context->GetRenderingAPI()
-              : CanvasRenderingContext::CanvasRenderingAPI::kUnknown);
-  const bool encountered_skipped_ops =
-      context && context->IdentifiabilityEncounteredSkippedOps();
-  const bool encountered_sensitive_ops =
-      context && context->IdentifiabilityEncounteredSensitiveOps();
-  const bool encountered_partially_digested_image =
-      context && context->IdentifiabilityEncounteredPartiallyDigestedImage();
-  // Bits [0-3] are the context type, bits [4-6] are skipped ops, sensitive
-  // ops, and partial image ops bits, respectively. The remaining bits are
-  // for the canvas digest.
-  uint64_t final_digest = (context_digest << 7) | context_type;
-  if (encountered_skipped_ops)
-    final_digest |= IdentifiableSurface::CanvasTaintBit::kSkipped;
-  if (encountered_sensitive_ops)
-    final_digest |= IdentifiableSurface::CanvasTaintBit::kSensitive;
-  if (encountered_partially_digested_image)
-    final_digest |= IdentifiableSurface::CanvasTaintBit::kPartiallyDigested;
-  return final_digest;
-}
-
 void CanvasRenderingContextHost::PageVisibilityChanged() {
   bool page_visible = IsPageVisible();
   if (RenderingContext()) {
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.h b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.h
index 1c0df11a..4e88738 100644
--- a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.h
+++ b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.h
@@ -7,7 +7,6 @@
 
 #include "base/byte_count.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/events/event_dispatcher.h"
@@ -161,12 +160,6 @@
 
   bool ContextHasOpenLayers(const CanvasRenderingContext*) const;
 
-  // Computes the digest that corresponds to the "input" of this canvas,
-  // including the context type, and if applicable, canvas digest, and taint
-  // bits.
-  IdentifiableToken IdentifiabilityInputDigest(
-      const CanvasRenderingContext* const context) const;
-
   Member<PlainTextPainter> plain_text_painter_;
   Member<UniqueFontSelector> unique_font_selector_;
   gfx::Size size_;
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
index 646cf3cf..d7cf1c3 100644
--- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
+++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -50,10 +50,6 @@
 #include "services/metrics/public/cpp/ukm_recorder.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "third_party/blink/public/common/features.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metrics.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/gpu/gpu.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -123,7 +119,6 @@
 #include "third_party/blink/renderer/platform/heap/thread_state.h"
 #include "third_party/blink/renderer/platform/image-encoders/image_encoder_utils.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
-#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 #include "ui/base/resource/resource_scale_factor.h"
@@ -553,26 +548,6 @@
       std::move(rendering_context_factory);
 }
 
-void HTMLCanvasElement::RecordIdentifiabilityMetric(
-    IdentifiableSurface surface,
-    IdentifiableToken value) const {
-  blink::IdentifiabilityMetricBuilder(GetDocument().UkmSourceID())
-      .Add(surface, value)
-      .Record(GetDocument().UkmRecorder());
-}
-
-void HTMLCanvasElement::IdentifiabilityReportWithDigest(
-    IdentifiableToken canvas_contents_token) const {
-  if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-          blink::IdentifiableSurface::Type::kCanvasReadback)) {
-    RecordIdentifiabilityMetric(
-        blink::IdentifiableSurface::FromTypeAndToken(
-            blink::IdentifiableSurface::Type::kCanvasReadback,
-            IdentifiabilityInputDigest(context_)),
-        canvas_contents_token.ToUkmMetricValue());
-  }
-}
-
 CanvasRenderingContext* HTMLCanvasElement::GetCanvasRenderingContext(
     ExecutionContext* execution_context,
     const String& type,
@@ -581,17 +556,6 @@
   auto* result =
       GetCanvasRenderingContextInternal(execution_context, type, attributes);
 
-  Document& doc = GetDocument();
-  if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-          IdentifiableSurface::Type::kCanvasRenderingContext)) {
-    IdentifiabilityMetricBuilder(doc.UkmSourceID())
-        .Add(IdentifiableSurface::FromTypeAndToken(
-                 IdentifiableSurface::Type::kCanvasRenderingContext,
-                 CanvasRenderingContext::RenderingAPIFromId(type)),
-             !!result)
-        .Record(doc.UkmRecorder());
-  }
-
   if (ContentsCcLayer() != old_contents_cc_layer)
     SetNeedsCompositingUpdate();
 
@@ -1291,7 +1255,6 @@
       // Currently we only support three encoding types.
       NOTREACHED();
     }
-    IdentifiabilityReportWithDigest(IdentifiabilityBenignStringToken(data_url));
     TRACE_EVENT_INSTANT(
         TRACE_DISABLED_BY_DEFAULT("identifiability.high_entropy_api"),
         "CanvasReadback", "data_url", data_url.Utf8());
@@ -1374,11 +1337,7 @@
     async_creator = MakeGarbageCollected<CanvasAsyncBlobCreator>(
         image_bitmap, options,
         CanvasAsyncBlobCreator::kHTMLCanvasToBlobCallback, callback, start_time,
-        GetExecutionContext(),
-        IdentifiabilityStudySettings::Get()->ShouldSampleType(
-            IdentifiableSurface::Type::kCanvasReadback)
-            ? IdentifiabilityInputDigest(context_)
-            : 0);
+        GetExecutionContext());
   }
 
   if (async_creator) {
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.h b/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
index 7b68c08d..ef49dc5 100644
--- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
+++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
@@ -32,8 +32,6 @@
 
 #include "base/gtest_prod_util.h"
 #include "cc/layers/texture_layer_client.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_blob_callback.h"
 #include "third_party/blink/renderer/core/core_export.h"
@@ -348,16 +346,6 @@
 
   void ColorSchemeMayHaveChanged();
 
-  void RecordIdentifiabilityMetric(IdentifiableSurface surface,
-                                   IdentifiableToken value) const;
-
-  // If the user is enrolled in the identifiability study, report the canvas
-  // type, and if applicable, canvas digest, taint bits, and
-  // |canvas_contents_token|, which represents the current bitmap displayed by
-  // this canvas.
-  void IdentifiabilityReportWithDigest(
-      IdentifiableToken canvas_contents_token) const;
-
   void PaintInternal(GraphicsContext&, const PhysicalRect&);
 
   using ContextFactoryVector =
diff --git a/third_party/blink/renderer/core/html/display_ad_element_monitor.cc b/third_party/blink/renderer/core/html/display_ad_element_monitor.cc
index 2c092e57..de38a0d 100644
--- a/third_party/blink/renderer/core/html/display_ad_element_monitor.cc
+++ b/third_party/blink/renderer/core/html/display_ad_element_monitor.cc
@@ -6,10 +6,12 @@
 
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/frame/local_frame_client.h"
+#include "third_party/blink/renderer/core/frame/settings.h"
 #include "third_party/blink/renderer/core/layout/hit_test_location.h"
 #include "third_party/blink/renderer/core/layout/hit_test_result.h"
 #include "third_party/blink/renderer/core/layout/layout_view.h"
 #include "third_party/blink/renderer/core/layout/map_coordinates_flags.h"
+#include "third_party/blink/renderer/core/page/page.h"
 #include "third_party/blink/renderer/core/paint/timing/paint_timing.h"
 
 namespace blink {
@@ -91,6 +93,18 @@
   LocalFrame* frame = element_->GetDocument().GetFrame();
   DCHECK(frame);
 
+  // We use this lifecycle update as an opportunity to poll the "Highlight ads"
+  // setting (toggled by DevTools). If it has changed, we trigger a repaint.
+  // This polling approach is less precise than relying on direct events, but
+  // it's more robust against potential race conditions or missed state updates.
+  bool should_highlight = frame->GetPage()->GetSettings().GetHighlightAds();
+  if (should_highlight != should_highlight_) {
+    should_highlight_ = should_highlight;
+    if (auto* layout_object = element_->GetLayoutObject()) {
+      layout_object->SetShouldDoFullPaintInvalidation();
+    }
+  }
+
   const LocalFrame& local_root_main_frame = frame->LocalFrameRoot();
 
   if (PaintTiming::From(*(local_root_main_frame.GetDocument()))
diff --git a/third_party/blink/renderer/core/html/display_ad_element_monitor.h b/third_party/blink/renderer/core/html/display_ad_element_monitor.h
index baca579..e48af9f 100644
--- a/third_party/blink/renderer/core/html/display_ad_element_monitor.h
+++ b/third_party/blink/renderer/core/html/display_ad_element_monitor.h
@@ -43,6 +43,8 @@
   OverlayVisibility CheckOverlayVisibility(const LocalFrame& main_frame,
                                            const gfx::Rect& rect_in_viewport);
 
+  bool ShouldHighlight() const { return should_highlight_; }
+
   void Trace(Visitor*) const override;
 
  private:
@@ -50,6 +52,11 @@
 
   bool started_ = false;
 
+  // Caches the last known value of the DevTools "Highlight ads" setting. This
+  // value remains `false` if the element is not eligible for monitoring (e.g.,
+  // a nested ad).
+  bool should_highlight_ = false;
+
   base::TimeTicks last_overlay_check_time_;
 
   // The last rectangle reported to the `PageTimingMetricsSender`.
diff --git a/third_party/blink/renderer/core/html/html_attribute_names.json5 b/third_party/blink/renderer/core/html/html_attribute_names.json5
index a874e927..1ddd664f 100644
--- a/third_party/blink/renderer/core/html/html_attribute_names.json5
+++ b/third_party/blink/renderer/core/html/html_attribute_names.json5
@@ -65,7 +65,6 @@
     "compact",
     "containertiming",
     "containertiming-ignore",
-    "containertiming-nesting",
     "content",
     "contenteditable",
     "contentmethod",
diff --git a/third_party/blink/renderer/core/html/html_element.cc b/third_party/blink/renderer/core/html/html_element.cc
index 0f165b0..93c86594 100644
--- a/third_party/blink/renderer/core/html/html_element.cc
+++ b/third_party/blink/renderer/core/html/html_element.cc
@@ -342,14 +342,6 @@
          EqualIgnoringASCIICase(value, "rtl");
 }
 
-bool HTMLElement::IsValidContainerTimingNestingAttribute(
-    const AtomicString& value) {
-  return EqualIgnoringASCIICase(value, "auto") ||
-         EqualIgnoringASCIICase(value, "ignore") ||
-         EqualIgnoringASCIICase(value, "transparent") ||
-         EqualIgnoringASCIICase(value, "shadowed");
-}
-
 void HTMLElement::CollectStyleForPresentationAttribute(
     const QualifiedName& name,
     const AtomicString& value,
@@ -468,8 +460,6 @@
        &HTMLElement::OnContainerTimingAttrChanged},
       {html_names::kContainertimingIgnoreAttr, kNoWebFeature, kNoEvent,
        &HTMLElement::OnContainerTimingIgnoreAttrChanged},
-      {html_names::kContainertimingNestingAttr, kNoWebFeature, kNoEvent,
-       &HTMLElement::OnContainerTimingNestingAttrChanged},
 
       {html_names::kOnabortAttr, kNoWebFeature, event_type_names::kAbort,
        nullptr},
@@ -3617,28 +3607,6 @@
   }
 }
 
-void HTMLElement::OnContainerTimingNestingAttrChanged(
-    const AttributeModificationParams& params) {
-  if (!RuntimeEnabledFeatures::ContainerTimingEnabled()) {
-    return;
-  }
-
-  if (!FastHasAttribute(html_names::kContainertimingAttr)) {
-    return;
-  }
-
-  bool is_old_valid = IsValidContainerTimingNestingAttribute(params.old_value);
-  bool is_new_valid = IsValidContainerTimingNestingAttribute(params.new_value);
-  if (!is_old_valid && !is_new_valid) {
-    return;
-  }
-
-  if (auto* window = GetDocument().domWindow()) {
-    ContainerTiming::From(*window).MaybeUpdateContainerRootNestingPolicy(
-        this, params.new_value);
-  }
-}
-
 ElementInternals* HTMLElement::attachInternals(
     ExceptionState& exception_state) {
   // 1. If this's is value is not null, then throw a "NotSupportedError"
diff --git a/third_party/blink/renderer/core/html/html_element.h b/third_party/blink/renderer/core/html/html_element.h
index 6467b06..3bea889c 100644
--- a/third_party/blink/renderer/core/html/html_element.h
+++ b/third_party/blink/renderer/core/html/html_element.h
@@ -174,8 +174,6 @@
 
   HTMLFormElement* FindFormAncestor() const;
 
-  static bool IsValidContainerTimingNestingAttribute(const AtomicString& value);
-
   bool HasDirectionAuto() const;
 
   static bool IsValidDirAttribute(const AtomicString& value);
@@ -472,8 +470,6 @@
   void OnPopoverChanged(const AttributeModificationParams&);
   void OnContainerTimingAttrChanged(const AttributeModificationParams&);
   void OnContainerTimingIgnoreAttrChanged(const AttributeModificationParams&);
-  void OnContainerTimingNestingAttrChanged(
-      const AttributeModificationParams& params);
   void OnRoleAttrChanged(const AttributeModificationParams&);
 
   int AdjustedOffsetForZoom(LayoutUnit);
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.cc b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
index 28319e98..6d5585a 100644
--- a/third_party/blink/renderer/core/html/html_frame_owner_element.cc
+++ b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
@@ -851,6 +851,11 @@
   return content_frame_->IsAdFrame();
 }
 
+bool HTMLFrameOwnerElement::ShouldHighlightAd() const {
+  return display_ad_element_monitor_ &&
+         display_ad_element_monitor_->ShouldHighlight();
+}
+
 mojom::blink::ColorScheme HTMLFrameOwnerElement::GetColorScheme() const {
   if (const auto* style = GetComputedStyle())
     return style->UsedColorScheme();
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.h b/third_party/blink/renderer/core/html/html_frame_owner_element.h
index 6565d8de..3f249381 100644
--- a/third_party/blink/renderer/core/html/html_frame_owner_element.h
+++ b/third_party/blink/renderer/core/html/html_frame_owner_element.h
@@ -160,6 +160,7 @@
 
   // Element overrides:
   bool IsAdRelated() const override;
+  bool ShouldHighlightAd() const override;
 
   // If the iframe is lazy-loaded, initiate its load, and return true if such
   // a load was initiated.
diff --git a/third_party/blink/renderer/core/html/html_permission_element.cc b/third_party/blink/renderer/core/html/html_permission_element.cc
index e682b4eb..ef561836 100644
--- a/third_party/blink/renderer/core/html/html_permission_element.cc
+++ b/third_party/blink/renderer/core/html/html_permission_element.cc
@@ -637,11 +637,6 @@
 void HTMLPermissionElement::UpdateIcon(
     PermissionName permnission,
     HTMLPermissionIconElement::VisualState visual_state) {
-  if (!RuntimeEnabledFeatures::PermissionElementIconEnabled(
-          GetDocument().GetExecutionContext())) {
-    return;
-  }
-
   permission_internal_icon_->SetIcon(permnission, is_precise_location_,
                                      visual_state);
 }
@@ -860,12 +855,9 @@
   permission_container_->SetShadowPseudoId(
       shadow_element_names::kPseudoInternalPermissionContainer);
   root.AppendChild(permission_container_);
-  if (RuntimeEnabledFeatures::PermissionElementIconEnabled(
-          GetDocument().GetExecutionContext())) {
-    permission_internal_icon_ =
-        MakeGarbageCollected<HTMLPermissionIconElement>(GetDocument());
-    permission_container_->AppendChild(permission_internal_icon_);
-  }
+  permission_internal_icon_ =
+      MakeGarbageCollected<HTMLPermissionIconElement>(GetDocument());
+  permission_container_->AppendChild(permission_internal_icon_);
   permission_text_span_ = MakeGarbageCollected<HTMLSpanElement>(GetDocument());
   permission_text_span_->SetShadowPseudoId(
       shadow_element_names::kPseudoInternalPermissionTextSpan);
diff --git a/third_party/blink/renderer/core/html/media/html_video_element.h b/third_party/blink/renderer/core/html/media/html_video_element.h
index bb8e2fe0..0076365 100644
--- a/third_party/blink/renderer/core/html/media/html_video_element.h
+++ b/third_party/blink/renderer/core/html/media/html_video_element.h
@@ -53,8 +53,6 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  enum class Supplements { kVideoFrameCallbackRequester = 0 };
-
   static const int kNoAlreadyUploadedFrame = -1;
 
   explicit HTMLVideoElement(Document&);
diff --git a/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc b/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc
index 3dec890e..6e3ebdf 100644
--- a/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc
@@ -1978,6 +1978,9 @@
         box->StyleRef().PositionAnchor();
     using Type = StylePositionAnchor::Type;
     switch (position_anchor.GetType()) {
+      case Type::kNone:
+        target_object = nullptr;
+        break;
       case Type::kAuto:
         target_object = box->AcceptableImplicitAnchor();
         break;
diff --git a/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc b/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc
index 9db208f..b855187 100644
--- a/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc
+++ b/third_party/blink/renderer/core/layout/anchor_evaluator_impl.cc
@@ -249,6 +249,8 @@
   DCHECK(anchor_specifier.IsDefault());
   using Type = StylePositionAnchor::Type;
   switch (position_anchor.GetType()) {
+    case Type::kNone:
+      return nullptr;
     case Type::kAuto:
       if (!implicit_anchor_) {
         return nullptr;
diff --git a/third_party/blink/renderer/core/layout/anchor_position_scroll_data.cc b/third_party/blink/renderer/core/layout/anchor_position_scroll_data.cc
index 09428fe..fd1c8fc 100644
--- a/third_party/blink/renderer/core/layout/anchor_position_scroll_data.cc
+++ b/third_party/blink/renderer/core/layout/anchor_position_scroll_data.cc
@@ -24,6 +24,8 @@
   const StylePositionAnchor& position_anchor = box.StyleRef().PositionAnchor();
   using Type = StylePositionAnchor::Type;
   switch (position_anchor.GetType()) {
+    case Type::kNone:
+      return nullptr;
     case Type::kAuto:
       return box.AcceptableImplicitAnchor();
     case Type::kName:
diff --git a/third_party/blink/renderer/core/layout/flex/flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/flex/flex_layout_algorithm.cc
index fac7f7b..ab14299 100644
--- a/third_party/blink/renderer/core/layout/flex/flex_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/flex/flex_layout_algorithm.cc
@@ -22,6 +22,7 @@
 #include "third_party/blink/renderer/core/layout/flex/layout_flexible_box.h"
 #include "third_party/blink/renderer/core/layout/flex/line_flexer.h"
 #include "third_party/blink/renderer/core/layout/geometry/box_strut.h"
+#include "third_party/blink/renderer/core/layout/geometry/layout_unit_diffuser.h"
 #include "third_party/blink/renderer/core/layout/geometry/logical_size.h"
 #include "third_party/blink/renderer/core/layout/layout_box.h"
 #include "third_party/blink/renderer/core/layout/layout_input_node.h"
@@ -1577,22 +1578,23 @@
   }
 }
 
-LayoutUnit ContentDistributionSpace(const StyleContentAlignmentData& data,
-                                    LayoutUnit free_space,
-                                    unsigned number_of_items) {
+LayoutUnitDiffuser ContentDistributionSpace(
+    const StyleContentAlignmentData& data,
+    LayoutUnit free_space,
+    unsigned number_of_items) {
   if (free_space <= LayoutUnit() || number_of_items <= 1) {
-    return LayoutUnit();
+    return LayoutUnitDiffuser();
   }
   switch (data.Distribution()) {
     case ContentDistributionType::kDefault:
     case ContentDistributionType::kStretch:
-      return LayoutUnit();
+      return LayoutUnitDiffuser();
     case ContentDistributionType::kSpaceBetween:
-      return free_space / (number_of_items - 1);
+      return LayoutUnitDiffuser(free_space, number_of_items - 1);
     case ContentDistributionType::kSpaceEvenly:
-      return free_space / (number_of_items + 1);
+      return LayoutUnitDiffuser(free_space, number_of_items + 1);
     case ContentDistributionType::kSpaceAround:
-      return free_space / number_of_items;
+      return LayoutUnitDiffuser(free_space, number_of_items);
   }
 }
 
@@ -1665,7 +1667,7 @@
     cross_axis_free_space = LayoutUnit();
   }
 
-  const LayoutUnit space_between_lines =
+  LayoutUnitDiffuser space_between_lines =
       ContentDistributionSpace(align_content, cross_axis_free_space, num_lines);
   LayoutUnit line_cross_axis_offset =
       (is_column_ ? BorderScrollbarPadding().inline_start
@@ -1699,14 +1701,14 @@
     const LayoutUnit main_axis_free_space =
         should_apply_main_axis_auto_margin ? LayoutUnit()
                                            : flex_line.main_axis_free_space;
-    const LayoutUnit main_axis_auto_margin =
+    LayoutUnitDiffuser main_axis_auto_margin =
         should_apply_main_axis_auto_margin
-            ? flex_line.main_axis_free_space /
-                  flex_line.main_axis_auto_margin_count
-            : LayoutUnit();
+            ? LayoutUnitDiffuser(flex_line.main_axis_free_space,
+                                 flex_line.main_axis_auto_margin_count)
+            : LayoutUnitDiffuser();
 
     const wtf_size_t line_items_size = flex_line.item_indices.size();
-    const LayoutUnit space_between_items = ContentDistributionSpace(
+    LayoutUnitDiffuser space_between_items = ContentDistributionSpace(
         justify_content, main_axis_free_space, line_items_size);
     LayoutUnit main_axis_offset =
         (is_column_ ? BorderScrollbarPadding().block_start
@@ -1808,10 +1810,10 @@
 
         // Main-axis margins are distributed to evenly across the whole line.
         if (is_margin_auto.MainStart()) {
-          margin.MainStart() = main_axis_auto_margin;
+          margin.MainStart() = main_axis_auto_margin.Next();
         }
         if (is_margin_auto.MainEnd()) {
-          margin.MainEnd() = main_axis_auto_margin;
+          margin.MainEnd() = main_axis_auto_margin.Next();
         }
       }
 
@@ -1864,7 +1866,7 @@
                      : LogicalOffset(main_axis_offset, cross_axis_offset);
 
       main_axis_offset += item.FlexedBorderBoxSize() + margin.MainEnd() +
-                          space_between_items + gap_between_items_;
+                          space_between_items.Next() + gap_between_items_;
 
       const BoxStrut logical_margins =
           physical_margins.ConvertToLogical(writing_direction);
@@ -1905,8 +1907,8 @@
       item_index_in_line++;
     }
 
-    line_cross_axis_offset +=
-        flex_line.line_cross_size + space_between_lines + gap_between_lines_;
+    line_cross_axis_offset += flex_line.line_cross_size +
+                              space_between_lines.Next() + gap_between_lines_;
   }
 
   if (auto first_baseline = baseline_accumulator.FirstBaseline())
diff --git a/third_party/blink/renderer/core/layout/inline/text_auto_space.h b/third_party/blink/renderer/core/layout/inline/text_auto_space.h
index df9262f..dcf12e0e 100644
--- a/third_party/blink/renderer/core/layout/inline/text_auto_space.h
+++ b/third_party/blink/renderer/core/layout/inline/text_auto_space.h
@@ -58,10 +58,6 @@
 };
 
 inline TextAutoSpace::TextAutoSpace(const InlineItemsData& data) {
-  if (!RuntimeEnabledFeatures::CSSTextAutoSpaceEnabled()) {
-    return;
-  }
-
   if (data.text_content.Is8Bit() ||
       std::ranges::none_of(data.items,
                            [](const auto& item) {
diff --git a/third_party/blink/renderer/core/layout/inline/text_auto_space_test.cc b/third_party/blink/renderer/core/layout/inline/text_auto_space_test.cc
index 5defb1e..87a8113 100644
--- a/third_party/blink/renderer/core/layout/inline/text_auto_space_test.cc
+++ b/third_party/blink/renderer/core/layout/inline/text_auto_space_test.cc
@@ -18,7 +18,7 @@
 using testing::ElementsAre;
 using testing::ElementsAreArray;
 
-class TextAutoSpaceTest : public RenderingTest, ScopedCSSTextAutoSpaceForTest {
+class TextAutoSpaceTest : public RenderingTest {
  public:
   struct AutoSpaceCallback : public TextAutoSpace::Callback {
     void DidApply(base::span<const OffsetWithSpacing> applied_offsets) final {
@@ -30,8 +30,6 @@
     Vector<wtf_size_t> offsets;
   };
 
-  explicit TextAutoSpaceTest() : ScopedCSSTextAutoSpaceForTest(true) {}
-
   LayoutBlockFlow* PreparePageLayoutBlock(String html,
                                           String container_css = String()) {
     html = String(R"HTML(
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.cc b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
index cf275cd..198a565 100644
--- a/third_party/blink/renderer/core/layout/layout_box_model_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
@@ -84,6 +84,8 @@
   const StylePositionAnchor& position_anchor = style.PositionAnchor();
   using Type = StylePositionAnchor::Type;
   switch (position_anchor.GetType()) {
+    case Type::kNone:
+      return false;
     case Type::kAuto:
       // Now we have `position-anchor: auto`. We need `AnchorPositionScrollData`
       // only if there's an implicit anchor element to track.
diff --git a/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc b/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc
index 3ad29b45..f71cbaa 100644
--- a/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc
+++ b/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc
@@ -321,6 +321,8 @@
     const StylePositionAnchor& position_anchor = style.PositionAnchor();
     using Type = StylePositionAnchor::Type;
     switch (position_anchor.GetType()) {
+      case Type::kNone:
+        return false;
       case Type::kAuto:
         return static_cast<bool>(element.ImplicitAnchorElement());
       case Type::kName:
@@ -410,6 +412,8 @@
   const StylePositionAnchor& position_anchor = style.PositionAnchor();
   using Type = StylePositionAnchor::Type;
   switch (position_anchor.GetType()) {
+    case Type::kNone:
+      return nullptr;
     case Type::kAuto:
       if (const auto* element = DynamicTo<Element>(node.GetDOMNode())) {
         return element->ImplicitAnchorElement();
diff --git a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
index 409b6b5..c661caa4 100644
--- a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
+++ b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
@@ -10,9 +10,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/task/single_thread_task_runner.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metrics.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h"
 #include "third_party/blink/renderer/core/css/css_font_selector.h"
@@ -233,16 +230,6 @@
   return image;
 }
 
-void OffscreenCanvas::RecordIdentifiabilityMetric(
-    const blink::IdentifiableSurface& surface,
-    const IdentifiableToken& token) const {
-  if (!IdentifiabilityStudySettings::Get()->ShouldSampleSurface(surface))
-    return;
-  blink::IdentifiabilityMetricBuilder(GetExecutionContext()->UkmSourceID())
-      .Add(surface, token)
-      .Record(GetExecutionContext()->UkmRecorder());
-}
-
 scoped_refptr<Image> OffscreenCanvas::GetSourceImageForCanvas(
     SourceImageStatus* status,
     const gfx::SizeF& size) {
@@ -365,10 +352,6 @@
     auto* execution_context = ExecutionContext::From(script_state);
     auto* async_creator = MakeGarbageCollected<CanvasAsyncBlobCreator>(
         image_bitmap, options, function_type, start_time, execution_context,
-        IdentifiabilityStudySettings::Get()->ShouldSampleType(
-            IdentifiableSurface::Type::kCanvasReadback)
-            ? IdentifiabilityInputDigest(context_)
-            : 0,
         resolver);
     async_creator->ScheduleAsyncBlobCreation(options->quality());
     return resolver->Promise();
diff --git a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h
index 8ecdc80..01be7ce 100644
--- a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h
+++ b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h
@@ -242,9 +242,6 @@
   static ContextFactoryVector& RenderingContextFactories();
   static CanvasRenderingContextFactory* GetRenderingContextFactory(int);
 
-  void RecordIdentifiabilityMetric(const blink::IdentifiableSurface& surface,
-                                   const IdentifiableToken& token) const;
-
   Member<CanvasRenderingContext> context_;
   WeakMember<ExecutionContext> execution_context_;
 
diff --git a/third_party/blink/renderer/core/paint/box_fragment_painter.cc b/third_party/blink/renderer/core/paint/box_fragment_painter.cc
index 45208467..e9ab81a3 100644
--- a/third_party/blink/renderer/core/paint/box_fragment_painter.cc
+++ b/third_party/blink/renderer/core/paint/box_fragment_painter.cc
@@ -70,6 +70,7 @@
 #include "third_party/blink/renderer/platform/graphics/paint/display_item_cache_skipper.h"
 #include "third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h"
 #include "third_party/blink/renderer/platform/graphics/paint/scoped_display_item_fragment.h"
+#include "third_party/skia/include/utils/SkParsePath.h"
 
 namespace blink {
 
@@ -394,6 +395,120 @@
   }
 }
 
+// Paints a highlight overlay for elements identified as ads. This supports the
+// "Highlight ads" feature in DevTools.
+void PaintAdHighlightIfNeeded(const PaintInfo& paint_info,
+                              const PhysicalOffset& paint_offset,
+                              const PhysicalBoxFragment& fragment,
+                              const DisplayItemClient& display_item_client,
+                              PaintPhase phase) {
+  // The highlight is an overlay, so it should only be painted during the
+  // foreground phase, after all element content is drawn.
+  if (phase != PaintPhase::kForeground) {
+    return;
+  }
+
+  const LayoutObject* layout_object = fragment.GetLayoutObject();
+  if (!layout_object) {
+    return;
+  }
+
+  Element* element = DynamicTo<Element>(layout_object->GetNode());
+  if (!element) {
+    return;
+  }
+
+  if (!element->ShouldHighlightAd()) {
+    return;
+  }
+
+  // Get the bounds of the fragment to paint the overlay over.
+  gfx::Rect paint_rect(
+      ToEnclosingRect(PhysicalRect(paint_offset, fragment.Size())));
+
+  // Check if we can use a cached version of this display item.
+  if (DrawingRecorder::UseCachedDrawingIfPossible(paint_info.context,
+                                                  display_item_client,
+                                                  DisplayItem::kFrameOverlay)) {
+    return;
+  }
+
+  // Record these draw operations as a single display item.
+  DrawingRecorder ad_highlight_recorder(paint_info.context, display_item_client,
+                                        DisplayItem::kFrameOverlay, paint_rect);
+
+  GraphicsContext& context = paint_info.context;
+
+  // Paint a red tint overlay.
+  {
+    Color red_overlay(255, 0, 0, 128);
+    context.FillRect(paint_rect, red_overlay, AutoDarkMode::Disabled(),
+                     SkBlendMode::kHardLight);
+  }
+
+  // Paint an "AD" text overlay.
+  {
+    DEFINE_STATIC_LOCAL(SkPath, ad_label_path, ());
+
+    // Check if we have parsed the path yet.
+    if (ad_label_path.isEmpty()) {
+      const char kAdLabelSvgPath[] =
+          "M36.6 62H21.9l-2.3 6.6H10.1L23.6 32.2h11.2L48.4 "
+          "68.7H38.9zm-12.3-6.7h10L 29.3 40.8zM62.6 39.3v22.2h3.4q5.7 0 "
+          "8.8-2.8 3-2.9 3-8.3 0-5.4-3-8.3-3-2.8-8.8-2.8zM53.2 32.2h9.9q8.3 0 "
+          "12.4 1.2 4.1 1.2 7 4 2.5 2.5 3.8 5.7 1.2 3.2 1.2 7.3 0 4.1-1.2 "
+          "7.4-1.3 3.2-3.8 5.7-3 2.8-7 4-4.1 1.2-12.3 1.2h-9.9z";
+
+      bool success =
+          SkParsePath::FromSVGString(kAdLabelSvgPath, &ad_label_path);
+
+      DCHECK(success) << "Internal Ad Highlight SVG string failed to parse.";
+    }
+
+    // Calculate the scale and offset to fit the 100x100 SVG path within
+    // the element's paint_rect, matching CSS
+    // 'preserveAspectRatio="xMidYMid meet"'.
+    const float kViewBoxSize = 100.0f;
+    float target_width = paint_rect.width();
+    float target_height = paint_rect.height();
+
+    // 'meet': Scale down to fit, preserving aspect ratio.
+    float scale =
+        std::min(target_width / kViewBoxSize, target_height / kViewBoxSize);
+
+    // Don't render the label if it's too small to be legible.
+    const float kMinPixelHeight = 10.0f;
+    float scaled_box_height = kViewBoxSize * scale;
+    if (scaled_box_height < kMinPixelHeight) {
+      return;
+    }
+
+    // 'xMidYMid': Center the scaled SVG path within the target rect.
+    float scaled_box_width = kViewBoxSize * scale;
+    float offset_x = paint_rect.x() + (target_width - scaled_box_width) / 2.0f;
+    float offset_y =
+        paint_rect.y() + (target_height - scaled_box_height) / 2.0f;
+
+    // Create the transformation matrix:
+    // 1. Scale the 100x100 path down.
+    // 2. Translate it to the center of the paint_rect.
+    AffineTransform transform;
+    transform.Translate(offset_x, offset_y);
+    transform.Scale(scale);
+
+    // Set up paint flags for the text.
+    // Corresponds to CSS: fill="#fff" opacity=".8"
+    cc::PaintFlags ad_label_flags;
+    ad_label_flags.setStyle(cc::PaintFlags::kFill_Style);
+    ad_label_flags.setAntiAlias(true);
+    ad_label_flags.setColor(SkColorSetARGB(204, 255, 255, 255));
+
+    // Apply the transform and draw the path.
+    context.ConcatCTM(transform);
+    context.DrawPath(ad_label_path, ad_label_flags, AutoDarkMode::Disabled());
+  }
+}
+
 }  // anonymous namespace
 
 PhysicalRect BoxFragmentPainter::InkOverflowIncludingFilters() const {
@@ -437,6 +552,17 @@
   } else {
     layout_object->Paint(modified_paint_info);
   }
+
+  PhysicalOffset paint_offset;
+  if (const FragmentData* fragment_data = fragment.GetFragmentData()) {
+    paint_offset = fragment_data->PaintOffset();
+  }
+
+  // Paint the ad highlight last. For this monolithic path (e.g., <img>,
+  // <iframe>), the paint_offset is provided by FragmentData and represents the
+  // fragment's position in the paint layer.
+  PaintAdHighlightIfNeeded(modified_paint_info, paint_offset, fragment,
+                           *layout_object, paint_info.phase);
 }
 
 void BoxFragmentPainter::Paint(const PaintInfo& paint_info) {
@@ -619,6 +745,10 @@
     info.phase = original_phase;
     PaintOverflowControls(info, paint_offset);
   }
+
+  // Paint the ad highlight last.
+  PaintAdHighlightIfNeeded(info, paint_offset, box_fragment_,
+                           GetDisplayItemClient(), original_phase);
 }
 
 bool BoxFragmentPainter::PaintOverflowControls(
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
index 1e2cc2b1..db38a3e 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -1797,9 +1797,19 @@
     }
   }
 
-  // The layout object for a ::view-transition pseudo is a sibling of the
-  // originating element's layout object.
-  return context_.current_effect;
+  DCHECK(!scope.IsDocumentElement());
+  auto* scope_properties =
+      scope.GetLayoutObject()->FirstFragment().PaintProperties();
+  if (!scope_properties) {
+    return context_.current_effect;
+  }
+
+  // Make the effect node for the ::view-transition pseudo-element a sibling of
+  // the ViewTransitionEffect for the scope element. The ViewTransitionEffect is
+  // guaranteed to exist (see ViewTransition::NeedsViewTransitionEffectNode).
+  auto* scope_vt_effect = scope_properties->ViewTransitionEffect();
+  CHECK(scope_vt_effect && scope_vt_effect->Parent());
+  return scope_vt_effect->Parent();
 }
 
 void FragmentPaintPropertyTreeBuilder::UpdateEffect() {
diff --git a/third_party/blink/renderer/core/paint/timing/container_timing.cc b/third_party/blink/renderer/core/paint/timing/container_timing.cc
index 49bad05e..733e7e6 100644
--- a/third_party/blink/renderer/core/paint/timing/container_timing.cc
+++ b/third_party/blink/renderer/core/paint/timing/container_timing.cc
@@ -64,24 +64,9 @@
   return GetContainerRoot(parent);
 }
 
-// static
-ContainerTiming::Record::NestingPolicy ContainerTiming::Record::ToNestingPolicy(
-    const AtomicString& str) {
-  if (EqualIgnoringASCIICase(str, "transparent")) {
-    return NestingPolicy::kTransparent;
-  } else if (EqualIgnoringASCIICase(str, "shadowed")) {
-    return NestingPolicy::kShadowed;
-  }
-  // "ignore", "auto" or unset
-  return NestingPolicy::kIgnore;
-}
-
 ContainerTiming::Record::Record(const DOMPaintTimingInfo& paint_timing_info,
-                                const AtomicString& identifier,
-                                const AtomicString& nesting_policy)
-    : first_paint_timing_info_(paint_timing_info),
-      identifier_(identifier),
-      nesting_policy_(ToNestingPolicy(nesting_policy)) {}
+                                const AtomicString& identifier)
+    : first_paint_timing_info_(paint_timing_info), identifier_(identifier) {}
 
 void ContainerTiming::Record::MaybeUpdateLastNewPaintedArea(
     ContainerTiming* container_timing,
@@ -100,25 +85,23 @@
 
   has_pending_changes_ = true;
 
+  // A container timing root with the ignore attribute will not report to
+  // ancestor roots.
+  if (container_root->FastGetAttribute(
+          html_names::kContainertimingIgnoreAttr)) {
+    return;
+  }
+
   Element* parent_container_root = GetParentContainerRoot(container_root);
   if (!parent_container_root) {
     return;
   }
 
-  Element* shadowed_element = container_root;
   Record* parent_record = container_timing->GetOrCreateRecord(
       paint_timing_info, parent_container_root);
-  if (parent_record->nesting_policy_ == NestingPolicy::kIgnore) {
-    return;
-  }
-
-  Element* propagated_element =
-      (parent_record->nesting_policy_ == NestingPolicy::kShadowed)
-          ? shadowed_element
-          : element;
   parent_record->MaybeUpdateLastNewPaintedArea(
-      container_timing, paint_timing_info, parent_container_root,
-      propagated_element, enclosing_rect);
+      container_timing, paint_timing_info, parent_container_root, element,
+      enclosing_rect);
 }
 
 void ContainerTiming::Record::MaybeEmitPerformanceEntry(
@@ -146,9 +129,7 @@
   if (it == container_root_records_.end()) {
     record = MakeGarbageCollected<Record>(
         paint_timing_info,
-        container_root->FastGetAttribute(html_names::kContainertimingAttr),
-        container_root->FastGetAttribute(
-            html_names::kContainertimingNestingAttr));
+        container_root->FastGetAttribute(html_names::kContainertimingAttr));
     container_root_records_.insert(container_root, record);
   } else {
     record = it->value;
@@ -156,24 +137,6 @@
   return record;
 }
 
-void ContainerTiming::MaybeUpdateContainerRootNestingPolicy(
-    Element* element,
-    const AtomicString& new_value) {
-  auto it = container_root_records_.find(element);
-  if (it != container_root_records_.end()) {
-    Record* record = it->value;
-
-    Record::NestingPolicy new_nesting_policy =
-        Record::ToNestingPolicy(new_value);
-
-    if (record->GetNestingPolicy() != new_nesting_policy) {
-      // If the nesting policy changes, the previous data is useless, drop
-      // record and start again.
-      container_root_records_.erase(it);
-    }
-  }
-}
-
 void ContainerTiming::MaybeUpdateContainerRootIdentifier(
     Element* element,
     const AtomicString& new_value) {
diff --git a/third_party/blink/renderer/core/paint/timing/container_timing.h b/third_party/blink/renderer/core/paint/timing/container_timing.h
index a1ede3a..0f0c0daa 100644
--- a/third_party/blink/renderer/core/paint/timing/container_timing.h
+++ b/third_party/blink/renderer/core/paint/timing/container_timing.h
@@ -35,8 +35,6 @@
   }
 
   bool CanReportToContainerTiming() const;
-  void MaybeUpdateContainerRootNestingPolicy(Element* element,
-                                             const AtomicString& new_value);
   void MaybeUpdateContainerRootIdentifier(Element* element,
                                           const AtomicString& new_value);
 
@@ -54,15 +52,10 @@
   class Record final : public GarbageCollected<Record> {
    public:
     Record(const DOMPaintTimingInfo& paint_timing_info,
-           const AtomicString& identifier,
-           const AtomicString& nested_policy);
+           const AtomicString& identifier);
     Record(const Record&) = delete;
     Record& operator=(const Record&) = delete;
 
-    enum class NestingPolicy { kIgnore, kTransparent, kShadowed };
-    static NestingPolicy ToNestingPolicy(const AtomicString& str);
-
-    NestingPolicy GetNestingPolicy() const { return nesting_policy_; }
     const AtomicString& identifier() const { return identifier_; }
 
     void MaybeUpdateLastNewPaintedArea(
@@ -79,7 +72,6 @@
    private:
     const DOMPaintTimingInfo first_paint_timing_info_;
     const AtomicString identifier_;
-    const NestingPolicy nesting_policy_ = NestingPolicy::kIgnore;
     DOMPaintTimingInfo last_new_painted_area_paint_timing_info_;
     WeakMember<Element> last_new_painted_area_element_;
     cc::Region painted_region_;
diff --git a/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc b/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc
index 10be773..ff6dede 100644
--- a/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc
+++ b/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc
@@ -38,15 +38,14 @@
   static ParsedFeaturePolicies& From(ExecutionContext& context) {
     ParsedFeaturePolicies* policies = context.GetParsedFeaturePolicies();
     if (!policies) {
-      policies = MakeGarbageCollected<ParsedFeaturePolicies>(context);
+      policies = MakeGarbageCollected<ParsedFeaturePolicies>();
       context.SetParsedFeaturePolicies(policies);
     }
     return *policies;
   }
 
-  explicit ParsedFeaturePolicies(ExecutionContext& context)
-      : execution_context_(context),
-        policies_(static_cast<size_t>(
+  ParsedFeaturePolicies()
+      : policies_(static_cast<size_t>(
                       network::mojom::PermissionsPolicyFeature::kMaxValue) +
                   1) {}
 
@@ -59,13 +58,9 @@
     return false;
   }
 
-  void Trace(Visitor* visitor) const override {
-    visitor->Trace(execution_context_);
-  }
+  void Trace(Visitor* visitor) const override {}
 
  private:
-  Member<ExecutionContext> execution_context_;
-
   // Tracks which permissions policies have already been parsed, so as not to
   // count them multiple times.
   Vector<bool> policies_;
diff --git a/third_party/blink/renderer/core/route_matching/route_map.cc b/third_party/blink/renderer/core/route_matching/route_map.cc
index 6b1f032e..1700c3c7 100644
--- a/third_party/blink/renderer/core/route_matching/route_map.cc
+++ b/third_party/blink/renderer/core/route_matching/route_map.cc
@@ -55,8 +55,6 @@
   return it->value;
 }
 
-// BEGIN Supplement support:
-
 const RouteMap* RouteMap::Get(const Document* document) {
   if (!document) {
     return nullptr;
@@ -80,8 +78,6 @@
   return *route_map;
 }
 
-// END Supplement support
-
 RouteMap::ParseResult RouteMap::ParseAndApplyRoutes(
     const String& route_map_text) {
   RouteMap::ParseResult result = ParseRoutes(route_map_text);
diff --git a/third_party/blink/renderer/core/route_matching/route_map.h b/third_party/blink/renderer/core/route_matching/route_map.h
index e712f38..f5643d9 100644
--- a/third_party/blink/renderer/core/route_matching/route_map.h
+++ b/third_party/blink/renderer/core/route_matching/route_map.h
@@ -66,8 +66,7 @@
 
   Route* get(const String& route_name);
 
-  // Supplement support. Document pointers may be null (in which case null will
-  // be returned).
+  // Document pointers may be null (in which case null will be returned).
   static const RouteMap* Get(const Document*);
   static RouteMap* Get(Document*);
   static RouteMap& Ensure(Document&);
diff --git a/third_party/blink/renderer/core/scheduler/dom_scheduler.cc b/third_party/blink/renderer/core/scheduler/dom_scheduler.cc
index f367e417..97df197 100644
--- a/third_party/blink/renderer/core/scheduler/dom_scheduler.cc
+++ b/third_party/blink/renderer/core/scheduler/dom_scheduler.cc
@@ -73,7 +73,6 @@
 
 DOMScheduler::DOMScheduler(ExecutionContext* context)
     : ExecutionContextLifecycleObserver(context),
-      execution_context_(*context),
       fixed_priority_task_signals_(kWebSchedulingPriorityCount) {
   if (context->IsContextDestroyed()) {
     return;
@@ -96,7 +95,6 @@
   visitor->Trace(signal_to_continuation_queue_map_);
   ScriptWrappable::Trace(visitor);
   ExecutionContextLifecycleObserver::Trace(visitor);
-  visitor->Trace(execution_context_);
 }
 
 ScriptPromise<IDLAny> DOMScheduler::postTask(
diff --git a/third_party/blink/renderer/core/scheduler/dom_scheduler.h b/third_party/blink/renderer/core/scheduler/dom_scheduler.h
index 52200e3..ecddcfb 100644
--- a/third_party/blink/renderer/core/scheduler/dom_scheduler.h
+++ b/third_party/blink/renderer/core/scheduler/dom_scheduler.h
@@ -166,8 +166,6 @@
   // context is used, and the cross-frame case where it's ignored.
   SchedulerTaskContext* GetSchedulerTaskContextForYield();
 
-  Member<ExecutionContext> execution_context_;
-
   // `fixed_priority_task_queues_` is initialized with one entry per priority,
   // indexed by priority. This will be empty when the window is detached.
   FixedPriorityTaskQueueVector fixed_priority_task_queues_;
diff --git a/third_party/blink/renderer/core/scheduler/dom_timer.cc b/third_party/blink/renderer/core/scheduler/dom_timer.cc
index 5e2c43c..9e9ca41d7 100644
--- a/third_party/blink/renderer/core/scheduler/dom_timer.cc
+++ b/third_party/blink/renderer/core/scheduler/dom_timer.cc
@@ -82,14 +82,13 @@
     CHECK(!context.IsWorkletGlobalScope());
     DOMTimerCoordinator* coordinator = context.GetDOMTimerCoordinator();
     if (!coordinator) {
-      coordinator = MakeGarbageCollected<DOMTimerCoordinator>(context);
+      coordinator = MakeGarbageCollected<DOMTimerCoordinator>();
       context.SetDOMTimerCoordinator(coordinator);
     }
     return *coordinator;
   }
 
-  explicit DOMTimerCoordinator(ExecutionContext& context)
-      : execution_context_(context) {}
+  DOMTimerCoordinator() = default;
 
   int Install(DOMTimer* timer) {
     int timeout_id = NextID();
@@ -121,10 +120,7 @@
   // deeper timer nesting level, see DOMTimer::DOMTimer.
   void SetTimerNestingLevel(int level) { timer_nesting_level_ = level; }
 
-  void Trace(Visitor* visitor) const final {
-    visitor->Trace(timers_);
-    visitor->Trace(execution_context_);
-  }
+  void Trace(Visitor* visitor) const final { visitor->Trace(timers_); }
 
  private:
   int NextID() {
@@ -141,7 +137,6 @@
     }
   }
 
-  Member<ExecutionContext> execution_context_;
   HeapHashMap<int, Member<DOMTimer>> timers_;
   int circular_sequential_id_ = 0;
   int timer_nesting_level_ = 0;
diff --git a/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.cc b/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.cc
index 495d18c4..69435bc3 100644
--- a/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.cc
+++ b/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.cc
@@ -106,7 +106,6 @@
 ScriptedIdleTaskController::ScriptedIdleTaskController(
     ExecutionContext* context)
     : ExecutionContextLifecycleStateObserver(context),
-      execution_context_(*context),
       scheduler_(ThreadScheduler::Current()) {
   UpdateStateIfNeeded();
 }
@@ -118,7 +117,6 @@
 void ScriptedIdleTaskController::Trace(Visitor* visitor) const {
   visitor->Trace(idle_tasks_);
   ExecutionContextLifecycleStateObserver::Trace(visitor);
-  visitor->Trace(execution_context_);
 }
 
 int ScriptedIdleTaskController::NextCallbackId() {
diff --git a/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.h b/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.h
index 18fd1f6f..2d3675d 100644
--- a/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.h
+++ b/third_party/blink/renderer/core/scheduler/scripted_idle_task_controller.h
@@ -154,8 +154,6 @@
     return !IsHashTraitsEmptyOrDeletedValue<Traits, CallbackId>(id);
   }
 
-  Member<ExecutionContext> execution_context_;
-
   // Not owned.
   ThreadScheduler* scheduler_;
 
diff --git a/third_party/blink/renderer/core/style/style_position_anchor.h b/third_party/blink/renderer/core/style/style_position_anchor.h
index 0f96bb9..b5c12354 100644
--- a/third_party/blink/renderer/core/style/style_position_anchor.h
+++ b/third_party/blink/renderer/core/style/style_position_anchor.h
@@ -19,12 +19,18 @@
   DISALLOW_NEW();
 
  public:
-  enum class Type { kAuto, kName };
+  enum class Type { kNone, kAuto, kName };
 
   explicit StylePositionAnchor(Type type) : type_(type) {}
   explicit StylePositionAnchor(const ScopedCSSName* name)
       : type_(Type::kName), name_(name) {}
 
+  static StylePositionAnchor Initial() {
+    return RuntimeEnabledFeatures::CSSPositionAnchorNoneEnabled()
+               ? StylePositionAnchor(StylePositionAnchor::Type::kNone)
+               : StylePositionAnchor(StylePositionAnchor::Type::kAuto);
+  }
+
   bool operator==(const StylePositionAnchor& o) const {
     return type_ == o.type_ && base::ValuesEquivalent(name_, o.name_);
   }
@@ -42,7 +48,7 @@
   void Trace(Visitor* visitor) const { visitor->Trace(name_); }
 
  private:
-  Type type_ = Type::kAuto;
+  Type type_ = Type::kNone;
   Member<const ScopedCSSName> name_;
 };
 
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc b/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc
index b011a33..ad58432 100644
--- a/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc
+++ b/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc
@@ -35,9 +35,6 @@
 
 namespace {
 
-BASE_FEATURE(kShutdownSoftNavigationContextOnDetach,
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 const char kPageLoadInternalSoftNavigationOutcome[] =
     "PageLoad.Internal.SoftNavigationOutcome";
 
@@ -264,9 +261,7 @@
   const auto viewport_area = CalculateViewportArea();
   const auto required_paint_area = CalculateRequiredPaintArea();
   for (const auto& context : potential_soft_navigations_) {
-    if (base::FeatureList::IsEnabled(kShutdownSoftNavigationContextOnDetach)) {
-      context->Shutdown();
-    }
+    context->Shutdown();
     OnSoftNavigationContextWasExhausted(*context.Get(), viewport_area,
                                         required_paint_area);
   }
diff --git a/third_party/blink/renderer/core/view_transition/view_transition.cc b/third_party/blink/renderer/core/view_transition/view_transition.cc
index 90f3c7e..c8e6efbf 100644
--- a/third_party/blink/renderer/core/view_transition/view_transition.cc
+++ b/third_party/blink/renderer/core/view_transition/view_transition.cc
@@ -828,14 +828,16 @@
 
 bool ViewTransition::NeedsViewTransitionEffectNode(
     const LayoutObject& object) const {
-  if (IsTerminalState(state_)) {
-    return false;
-  }
-
-  // For a document transition, the scope's effect node is associated with the
-  // LayoutView rather than the document element.
+  // The scope always needs an effect node, even if the scope element is not a
+  // participant in the transition. The reason for this is so that we can place
+  // the effect node for the ::view-transition pseudo-element as a sibling of
+  // the scope's effect. For a document transition, the scope's effect node is
+  // associated with the LayoutView rather than the document element.
   if (IsA<LayoutView>(object)) {
-    return has_document_scope_;
+    return has_document_scope_ && !IsTerminalState(state_);
+  }
+  if (!has_document_scope_ && object == scope_->GetLayoutObject()) {
+    return !IsTerminalState(state_);
   }
 
   // Otherwise check if the layout object has a transition element.
diff --git a/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc b/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc
index 0fb3ebf..c1335bf 100644
--- a/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc
+++ b/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc
@@ -1772,6 +1772,10 @@
       !scope_box->IsLayoutView()) {
     // TODO(crbug.com/394052227): Should we force compositing on the scope?
     // If we do, its paint offset will always be zero.
+
+    // Adjust for the scope element's borders and scrollbars.
+    // TODO(crbug.com/394052227): Is this correct in RTL / all writing modes?
+    transform.Translate(-scope_box->ClientLeft(), -scope_box->ClientTop());
     transform.Translate(-gfx::Vector2dF(scope_fragment.PaintOffset()));
   }
 
diff --git a/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.cc b/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.cc
index 49e76f9..f8c8108 100644
--- a/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.cc
+++ b/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.cc
@@ -16,18 +16,14 @@
   CHECK(!execution_context.IsContextDestroyed());
   CrosKiosk* supplement = execution_context.GetCrosKiosk();
   if (!supplement) {
-    supplement = MakeGarbageCollected<CrosKiosk>(execution_context);
+    supplement = MakeGarbageCollected<CrosKiosk>();
     execution_context.SetCrosKiosk(supplement);
   }
   return *supplement;
 }
 
-CrosKiosk::CrosKiosk(ExecutionContext& execution_context)
-    : execution_context_(execution_context) {}
-
 void CrosKiosk::Trace(Visitor* visitor) const {
   ScriptWrappable::Trace(visitor);
-  visitor->Trace(execution_context_);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.h b/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.h
index 02ed7c7..2f5606e 100644
--- a/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.h
+++ b/third_party/blink/renderer/extensions/chromeos/kiosk/cros_kiosk.h
@@ -18,12 +18,9 @@
  public:
   static CrosKiosk& From(ExecutionContext&);
 
-  explicit CrosKiosk(ExecutionContext&);
+  CrosKiosk() = default;
 
   void Trace(Visitor*) const override;
-
- private:
-  Member<ExecutionContext> execution_context_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/extensions/webview/web_view_android.cc b/third_party/blink/renderer/extensions/webview/web_view_android.cc
index 803c8968..ae96e70 100644
--- a/third_party/blink/renderer/extensions/webview/web_view_android.cc
+++ b/third_party/blink/renderer/extensions/webview/web_view_android.cc
@@ -39,7 +39,6 @@
 
 WebViewAndroid::WebViewAndroid(ExecutionContext& execution_context)
     : ExecutionContextClient(&execution_context),
-      execution_context_(execution_context),
       media_integrity_service_remote_(&execution_context) {}
 
 void WebViewAndroid::EnsureServiceConnection(
@@ -172,7 +171,6 @@
 void WebViewAndroid::Trace(Visitor* visitor) const {
   visitor->Trace(provider_resolvers_);
   visitor->Trace(media_integrity_service_remote_);
-  visitor->Trace(execution_context_);
   ExecutionContextClient::Trace(visitor);
   ScriptWrappable::Trace(visitor);
 }
diff --git a/third_party/blink/renderer/extensions/webview/web_view_android.h b/third_party/blink/renderer/extensions/webview/web_view_android.h
index c64b9fc..065bd7c 100644
--- a/third_party/blink/renderer/extensions/webview/web_view_android.h
+++ b/third_party/blink/renderer/extensions/webview/web_view_android.h
@@ -45,7 +45,6 @@
       ScriptPromiseResolver<MediaIntegrityTokenProvider>* resolver,
       std::optional<mojom::blink::WebViewMediaIntegrityErrorCode> error);
 
-  Member<ExecutionContext> execution_context_;
   HeapHashSet<Member<ScriptPromiseResolver<MediaIntegrityTokenProvider>>>
       provider_resolvers_;
   HeapMojoRemote<mojom::blink::WebViewMediaIntegrityService>
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn
index b994a7a..242f63a 100644
--- a/third_party/blink/renderer/modules/BUILD.gn
+++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -436,7 +436,6 @@
     "canvas/canvas2d/canvas_rendering_context_2d_test.cc",
     "canvas/canvas2d/canvas_style_test_utils.cc",
     "canvas/canvas2d/canvas_style_test_utils.h",
-    "canvas/canvas2d/identifiability_study_helper_test.cc",
     "canvas/htmlcanvas/html_canvas_element_module_test.cc",
     "canvas/offscreencanvas/offscreen_canvas_rendering_api_ukm_metrics_test.cc",
     "canvas/offscreencanvas/offscreen_canvas_test.cc",
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc
index 9a9f5284..ca06e26 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -5450,8 +5450,33 @@
     case ax::mojom::blink::Role::kPopUpButton:
       return ax::mojom::blink::DefaultActionVerb::kOpen;
     default:
-      if (action_element == GetNode())
-        return ax::mojom::blink::DefaultActionVerb::kClick;
+      if (action_element == GetNode()) {
+        if (use_layout_based_action_) {
+          ui::AXRelativeBounds bounds;
+          bool clips_children;
+          PopulateAXRelativeBounds(bounds, &clips_children);
+
+          HitTestRequest request(
+              HitTestRequest::kReadOnly | HitTestRequest::kActive |
+              HitTestRequest::kListBased | HitTestRequest::kPenetratingList);
+          HitTestLocation location(PhysicalRect::EnclosingRect(bounds.bounds));
+          HitTestResult result(request, location);
+          GetDocument()->GetLayoutView()->HitTestNoLifecycleUpdate(location,
+                                                                  result);
+          const HitTestResult::NodeSet& hits = result.ListBasedTestResult();
+          for (Node* hit : hits) {
+            while (hit) {
+              if (hit == GetNode()) {
+                return ax::mojom::DefaultActionVerb::kClickInHitTest;
+              }
+              hit = hit->parentNode();
+            }
+          }
+          return ax::mojom::DefaultActionVerb::kClickNotInHitTest;
+        } else {
+          return ax::mojom::DefaultActionVerb::kClick;
+        }
+      }
       return ax::mojom::blink::DefaultActionVerb::kClickAncestor;
   }
 }
@@ -7395,6 +7420,10 @@
     case ax::mojom::blink::Action::kLongClick:
     case ax::mojom::blink::Action::kScrollToPositionAtRowColumn:
       return false;  // Handled in `RenderAccessibilityImpl`.
+    case ax::mojom::Action::kRequestLayoutBasedAction:
+      use_layout_based_action_ = true;
+      AXObjectCache().MarkAXObjectDirtyWithCleanLayout(this);
+      return true;
   }
 }
 
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h
index 867fc7e0..3a8f1d4 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.h
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -1556,6 +1556,9 @@
   // Only children that are included in tree, maybe rename to children_in_tree_.
   AXObjectVector children_;
   bool has_dirty_descendants_ = false;
+  // When true, actions may use more expensive layout-based computations.
+  // e.g. DefaultActionVerb::kClickInHitTest.
+  bool use_layout_based_action_ = false;
 
   // The final role, taking into account the ARIA role and native role.
   ax::mojom::blink::Role role_;
diff --git a/third_party/blink/renderer/modules/ad_auction/navigator_auction.h b/third_party/blink/renderer/modules/ad_auction/navigator_auction.h
index a79bb8f..ec75653 100644
--- a/third_party/blink/renderer/modules/ad_auction/navigator_auction.h
+++ b/third_party/blink/renderer/modules/ad_auction/navigator_auction.h
@@ -49,7 +49,6 @@
   explicit NavigatorAuction(Navigator&);
 
   // Gets, or creates, NavigatorAuction supplement on Navigator.
-  // See platform/Supplementable.h
   static NavigatorAuction& From(ExecutionContext*, Navigator&);
 
   // TODO(crbug.com/1441988): Make `const AuctionAdInterestGroup*` after rename.
diff --git a/third_party/blink/renderer/modules/ai/ai_interface_proxy.cc b/third_party/blink/renderer/modules/ai/ai_interface_proxy.cc
index 67aa05c..34f827ff 100644
--- a/third_party/blink/renderer/modules/ai/ai_interface_proxy.cc
+++ b/third_party/blink/renderer/modules/ai/ai_interface_proxy.cc
@@ -13,8 +13,7 @@
 // TODO(crbug.com/406770758): Consider refactoring to have this class own the
 // execution context as a member.
 AIInterfaceProxy::AIInterfaceProxy(ExecutionContext* execution_context)
-    : execution_context_(*execution_context),
-      task_runner_(
+    : task_runner_(
           execution_context->GetTaskRunner(TaskType::kInternalDefault)),
       language_detection_model_(
           MakeGarbageCollected<LanguageDetectionModel>()) {}
@@ -22,7 +21,6 @@
 AIInterfaceProxy::~AIInterfaceProxy() = default;
 
 void AIInterfaceProxy::Trace(Visitor* visitor) const {
-  visitor->Trace(execution_context_);
   visitor->Trace(translation_manager_remote_);
   visitor->Trace(language_detection_driver_);
   visitor->Trace(language_detection_model_);
diff --git a/third_party/blink/renderer/modules/ai/ai_interface_proxy.h b/third_party/blink/renderer/modules/ai/ai_interface_proxy.h
index a2edda32..0e2677a 100644
--- a/third_party/blink/renderer/modules/ai/ai_interface_proxy.h
+++ b/third_party/blink/renderer/modules/ai/ai_interface_proxy.h
@@ -73,8 +73,6 @@
   HeapMojoRemote<mojom::blink::AIManager>& GetAIManagerRemoteImpl(
       ExecutionContext* execution_context);
 
-  Member<ExecutionContext> execution_context_;
-
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
 
   HeapMojoRemote<mojom::blink::TranslationManager> translation_manager_remote_{
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_registration.cc b/third_party/blink/renderer/modules/background_fetch/background_fetch_registration.cc
index eedc66a..138177c 100644
--- a/third_party/blink/renderer/modules/background_fetch/background_fetch_registration.cc
+++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_registration.cc
@@ -8,8 +8,6 @@
 #include <utility>
 
 #include "base/compiler_specific.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
@@ -356,15 +354,6 @@
 
 V8BackgroundFetchFailureReason BackgroundFetchRegistration::failureReason()
     const {
-  blink::IdentifiabilityMetricBuilder(GetExecutionContext()->UkmSourceID())
-      .Add(
-          blink::IdentifiableSurface::FromTypeAndToken(
-              blink::IdentifiableSurface::Type::kWebFeature,
-              WebFeature::
-                  kV8BackgroundFetchRegistration_FailureReason_AttributeGetter),
-          failure_reason_ ==
-              mojom::BackgroundFetchFailureReason::QUOTA_EXCEEDED)
-      .Record(GetExecutionContext()->UkmRecorder());
   switch (failure_reason_) {
     case mojom::BackgroundFetchFailureReason::NONE:
       return V8BackgroundFetchFailureReason(
diff --git a/third_party/blink/renderer/modules/canvas/BUILD.gn b/third_party/blink/renderer/modules/canvas/BUILD.gn
index 16ba800..b341a6e1 100644
--- a/third_party/blink/renderer/modules/canvas/BUILD.gn
+++ b/third_party/blink/renderer/modules/canvas/BUILD.gn
@@ -32,8 +32,6 @@
     "canvas2d/canvas_style.h",
     "canvas2d/clip_list.cc",
     "canvas2d/clip_list.h",
-    "canvas2d/identifiability_study_helper.cc",
-    "canvas2d/identifiability_study_helper.h",
     "canvas2d/mesh_2d_buffer.h",
     "canvas2d/mesh_2d_index_buffer.h",
     "canvas2d/mesh_2d_uv_buffer.h",
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
index cf2145e..eaa4c83 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
@@ -59,7 +59,6 @@
 #include "third_party/blink/renderer/core/style/computed_style.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/modules/canvas/htmlcanvas/canvas_context_creation_attributes_helpers.h"
 #include "third_party/blink/renderer/modules/webgpu/dawn_conversions.h"
 #include "third_party/blink/renderer/modules/webgpu/dawn_enum_conversions.h"
@@ -89,7 +88,6 @@
 #include "third_party/blink/renderer/platform/graphics/video_frame_image_util.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
-#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/text/layout_locale.h"
 #include "third_party/blink/renderer/platform/text/text_direction.h"
@@ -584,14 +582,6 @@
     return;
   }
 
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kPutImageData, data->width(), data->height(),
-        data->GetPredefinedColorSpace(), data->GetSkColorType(), dx, dy,
-        dirty_x, dirty_y, dirty_width, dirty_height);
-    identifiability_study_helper_.set_encountered_partially_digested_image();
-  }
-
   if (dirty_width < 0) {
     if (dirty_x < 0) {
       dirty_x = dirty_width = 0;
@@ -702,11 +692,6 @@
 }
 
 void BaseRenderingContext2D::setTextAlign(const V8CanvasTextAlign align) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kSetTextAlign,
-        IdentifiabilityBenignStringToken(align.AsString()));
-  }
   GetState().SetTextAlign(align);
 }
 
@@ -716,11 +701,6 @@
 
 void BaseRenderingContext2D::setTextBaseline(
     const V8CanvasTextBaseline baseline) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kSetTextBaseline,
-        IdentifiabilityBenignStringToken(baseline.AsString()));
-  }
   GetState().SetTextBaseline(baseline);
 }
 
@@ -862,11 +842,6 @@
     return;
   }
 
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kSetFont, IdentifiabilityBenignStringToken(new_font));
-  }
-
   CanvasRenderingContext2DState& state = GetState();
   if (new_font == state.UnparsedFont() && CurrentFontResolvedAndUpToDate()) {
     return;
@@ -1071,17 +1046,6 @@
     return;
   }
 
-  // TODO(crbug.com/40191831): Remove once identifiability study is removed.
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        paint_type == CanvasRenderingContext2DState::kFillPaintType
-            ? CanvasOps::kFillText
-            : CanvasOps::kStrokeText,
-        IdentifiabilitySensitiveStringToken(text), x, y,
-        max_width ? *max_width : -1);
-    identifiability_study_helper_.set_encountered_sensitive_ops();
-  }
-
   const Font* font =
       (cluster_font != nullptr) ? cluster_font : AccessFont(canvas);
   const SimpleFontData* font_data = font->PrimaryFont();
@@ -1236,9 +1200,6 @@
     return;
   }
 
-  // TODO(crbug.com/40191831): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
-
   state.SetLang(lang_string);
 
   // If the font has been realized, reset it to account for the new lang
@@ -1262,8 +1223,6 @@
 void BaseRenderingContext2D::setLetterSpacing(const String& letter_spacing) {
   UseCounter::Count(GetTopExecutionContext(),
                     WebFeature::kCanvasRenderingContext2DLetterSpacing);
-  // TODO(crbug.com/40191831): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
   CanvasRenderingContext2DState& state = GetState();
   if (!state.HasRealizedFont()) {
     setFont(font());
@@ -1275,9 +1234,6 @@
 void BaseRenderingContext2D::setWordSpacing(const String& word_spacing) {
   UseCounter::Count(GetTopExecutionContext(),
                     WebFeature::kCanvasRenderingContext2DWordSpacing);
-  // TODO(crbug.com/1234113): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
-
   CanvasRenderingContext2DState& state = GetState();
   if (!state.HasRealizedFont()) {
     setFont(font());
@@ -1290,8 +1246,6 @@
     const V8CanvasTextRendering& text_rendering) {
   UseCounter::Count(GetTopExecutionContext(),
                     WebFeature::kCanvasRenderingContext2DTextRendering);
-  // TODO(crbug.com/1234113): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
   CanvasRenderingContext2DState& state = GetState();
   if (!state.HasRealizedFont()) {
     setFont(font());
@@ -1307,8 +1261,6 @@
     const V8CanvasFontKerning font_kerning) {
   UseCounter::Count(GetTopExecutionContext(),
                     WebFeature::kCanvasRenderingContext2DFontKerning);
-  // TODO(crbug.com/1234113): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
   CanvasRenderingContext2DState& state = GetState();
   if (!state.HasRealizedFont()) {
     setFont(font());
@@ -1333,8 +1285,6 @@
     const V8CanvasFontStretch& font_stretch) {
   UseCounter::Count(GetTopExecutionContext(),
                     WebFeature::kCanvasRenderingContext2DFontStretch);
-  // TODO(crbug.com/1234113): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
   CanvasRenderingContext2DState& state = GetState();
   if (!state.HasRealizedFont()) {
     setFont(font());
@@ -1350,8 +1300,6 @@
     const V8CanvasFontVariantCaps& font_variant_caps) {
   UseCounter::Count(GetTopExecutionContext(),
                     WebFeature::kCanvasRenderingContext2DFontVariantCaps);
-  // TODO(crbug.com/1234113): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
   CanvasRenderingContext2DState& state = GetState();
   if (!state.HasRealizedFont()) {
     setFont(font());
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.cc
index f9b27eb..965ee61 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.cc
@@ -87,7 +87,6 @@
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_index_buffer.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_uv_buffer.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_vertex_buffer.h"
@@ -125,7 +124,6 @@
 #include "third_party/blink/renderer/platform/heap/member.h"
 #include "third_party/blink/renderer/platform/heap/visitor.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
-#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/transforms/affine_transform.h"
 #include "third_party/blink/renderer/platform/wtf/casting.h"
@@ -402,9 +400,6 @@
   if (isContextLost()) [[unlikely]] {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSave);
-  }
 
   ValidateStateStack();
 
@@ -431,9 +426,6 @@
     return;
   }
 
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kRestore);
-  }
   ValidateStateStack();
   if (state_stack_.size() <= 1) {
     // State stack is empty. Extra `restore()` are silently ignored.
@@ -464,8 +456,6 @@
   if (isContextLost()) [[unlikely]] {
     return;
   }
-  // TODO(crbug.com/40191831): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
 
   // Make sure we have a recorder and paint canvas.
   if (!GetOrCreatePaintCanvas()) {
@@ -685,8 +675,6 @@
   if (isContextLost()) [[unlikely]] {
     return;
   }
-  // TODO(crbug.com/40191831): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
 
   ValidateStateStack();
   if (state_stack_.size() <= 1 || layer_count_ <= 0) {
@@ -838,9 +826,6 @@
 }
 
 void Canvas2DRecorderContext::ResetInternal() {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kReset);
-  }
   ValidateStateStack();
   state_stack_.resize(1);
   state_stack_.front() = MakeGarbageCollected<CanvasRenderingContext2DState>();
@@ -871,26 +856,6 @@
   ResetInternal();
 }
 
-void Canvas2DRecorderContext::IdentifiabilityUpdateForStyleUnion(
-    const V8CanvasStyle& style) {
-  switch (style.type) {
-    case V8CanvasStyleType::kCSSColorValue:
-      break;
-    case V8CanvasStyleType::kGradient:
-      identifiability_study_helper_.UpdateBuilder(
-          style.gradient->GetIdentifiableToken());
-      break;
-    case V8CanvasStyleType::kPattern:
-      identifiability_study_helper_.UpdateBuilder(
-          style.pattern->GetIdentifiableToken());
-      break;
-    case V8CanvasStyleType::kString:
-      identifiability_study_helper_.UpdateBuilder(
-          IdentifiabilityBenignStringToken(style.string));
-      break;
-  }
-}
-
 RespectImageOrientationEnum
 Canvas2DRecorderContext::RespectImageOrientationInternal(
     CanvasImageSource* image_source) {
@@ -906,26 +871,6 @@
   return CanvasStyleToV8(script_state, GetState().StrokeStyle());
 }
 
-void Canvas2DRecorderContext::
-    UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill(
-        const V8CanvasStyle& v8_style,
-        CanvasOps op) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(op);
-    IdentifiabilityUpdateForStyleUnion(v8_style);
-  }
-}
-
-void Canvas2DRecorderContext::
-    UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill(
-        v8::Local<v8::String> v8_string,
-        CanvasOps op) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(op);
-    identifiability_study_helper_.UpdateBuilder(v8_string->GetIdentityHash());
-  }
-}
-
 bool Canvas2DRecorderContext::ExtractColorFromV8StringAndUpdateCache(
     v8::Isolate* isolate,
     v8::Local<v8::String> v8_string,
@@ -980,8 +925,6 @@
   // from the string is expensive) so we keep a map of string to color.
   if (value->IsString()) {
     v8::Local<v8::String> v8_string = value.As<v8::String>();
-    UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill(
-        v8_string, CanvasOps::kSetStrokeStyle);
     if (state.IsUnparsedStrokeColor(v8_string)) {
       return;
     }
@@ -1008,9 +951,6 @@
     return;
   }
 
-  UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill(
-      v8_style, CanvasOps::kSetStrokeStyle);
-
   switch (v8_style.type) {
     case V8CanvasStyleType::kCSSColorValue:
       state.SetStrokeColor(v8_style.css_color_value);
@@ -1108,8 +1048,6 @@
   // details on this.
   if (value->IsString()) {
     v8::Local<v8::String> v8_string = value.As<v8::String>();
-    UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill(
-        v8_string, CanvasOps::kSetFillStyle);
     if (state.IsUnparsedFillColor(v8_string)) {
       return;
     }
@@ -1132,9 +1070,6 @@
     return;
   }
 
-  UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill(v8_style,
-                                                      CanvasOps::kSetFillStyle);
-
   switch (v8_style.type) {
     case V8CanvasStyleType::kCSSColorValue:
       state.SetFillColor(v8_style.css_color_value);
@@ -1177,10 +1112,6 @@
   if (state.LineWidth() == width) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetLineWidth,
-                                                width);
-  }
   state.SetLineWidth(ClampTo<float>(width));
 }
 
@@ -1197,9 +1128,6 @@
   if (state.GetLineCap() == cap) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetLineCap, cap);
-  }
   state.SetLineCap(cap);
 }
 
@@ -1216,9 +1144,6 @@
   if (state.GetLineJoin() == join) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetLineJoin, join);
-  }
   state.SetLineJoin(join);
 }
 
@@ -1234,10 +1159,6 @@
   if (state.MiterLimit() == limit) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetMiterLimit,
-                                                limit);
-  }
   state.SetMiterLimit(ClampTo<float>(limit));
 }
 
@@ -1259,10 +1180,6 @@
   if (state.ShadowOffset().x() == x) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetShadowOffsetX,
-                                                x);
-  }
   state.SetShadowOffsetX(ClampTo<float>(x));
 }
 
@@ -1279,10 +1196,6 @@
   if (state.ShadowOffset().y() == y) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetShadowOffsetY,
-                                                y);
-  }
   state.SetShadowOffsetY(ClampTo<float>(y));
 }
 
@@ -1299,10 +1212,6 @@
   if (state.ShadowBlur() == blur) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetShadowBlur,
-                                                blur);
-  }
   state.SetShadowBlur(ClampTo<float>(blur));
 }
 
@@ -1322,10 +1231,6 @@
   if (state.ShadowColor() == color) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetShadowColor,
-                                                color.Rgb());
-  }
   state.SetShadowColor(color);
 }
 
@@ -1342,10 +1247,6 @@
   if (!LineDashSequenceIsValid(dash)) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetLineDash,
-                                                base::span(dash));
-  }
   GetState().SetLineDash(dash);
 }
 
@@ -1358,10 +1259,6 @@
   if (!std::isfinite(offset) || state.LineDashOffset() == offset) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetLineDashOffset,
-                                                offset);
-  }
   state.SetLineDashOffset(ClampTo<float>(offset));
 }
 
@@ -1377,10 +1274,6 @@
   if (state.GlobalAlpha() == alpha) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kSetGlobalAlpha,
-                                                alpha);
-  }
   state.SetGlobalAlpha(alpha);
 }
 
@@ -1413,10 +1306,6 @@
   if (state.GlobalComposite() == sk_blend_mode) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kSetGlobalCompositeOpertion, sk_blend_mode);
-  }
   state.SetGlobalComposite(sk_blend_mode);
 }
 
@@ -1443,16 +1332,9 @@
                         WebFeature::kCanvasRenderingContext2DCanvasFilter);
       state.SetCanvasFilter(input->GetAsCanvasFilter());
       SnapshotStateForFilter();
-      // TODO(crbug.com/40191831): Instrument new canvas APIs.
-      identifiability_study_helper_.set_encountered_skipped_ops();
       break;
     case V8UnionCanvasFilterOrString::ContentType::kString: {
       const String& filter_string = input->GetAsString();
-      if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-        identifiability_study_helper_.UpdateBuilder(
-            CanvasOps::kSetFilter,
-            IdentifiabilitySensitiveStringToken(filter_string));
-      }
       if (!state.GetCanvasFilter() && !state.IsFontDirtyForFilter() &&
           filter_string == state.UnparsedCSSFilter()) {
         return;
@@ -1484,9 +1366,6 @@
   if (!std::isfinite(sx) || !std::isfinite(sy)) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kScale, sx, sy);
-  }
 
   const CanvasRenderingContext2DState& state = GetState();
   AffineTransform new_transform = state.GetTransform();
@@ -1515,10 +1394,6 @@
   if (!std::isfinite(angle_in_radians)) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kRotate,
-                                                angle_in_radians);
-  }
 
   const CanvasRenderingContext2DState& state = GetState();
   AffineTransform new_transform = state.GetTransform();
@@ -1551,9 +1426,6 @@
   if (!std::isfinite(tx) || !std::isfinite(ty)) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kTranslate, tx, ty);
-  }
 
   const CanvasRenderingContext2DState& state = GetState();
   AffineTransform new_transform = state.GetTransform();
@@ -1596,10 +1468,6 @@
   float fm22 = ClampTo<float>(m22);
   float fdx = ClampTo<float>(dx);
   float fdy = ClampTo<float>(dy);
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kTransform, fm11,
-                                                fm12, fm21, fm22, fdx, fdy);
-  }
 
   AffineTransform transform(fm11, fm12, fm21, fm22, fdx, fdy);
   const CanvasRenderingContext2DState& state = GetState();
@@ -1629,9 +1497,6 @@
   if (!c) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kResetTransform);
-  }
 
   CanvasRenderingContext2DState& state = GetState();
   AffineTransform ctm = state.GetTransform();
@@ -1709,9 +1574,6 @@
 
 void Canvas2DRecorderContext::beginPath() {
   Clear();
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kBeginPath);
-  }
 }
 
 void Canvas2DRecorderContext::DrawPathInternal(
@@ -1823,9 +1685,6 @@
 }
 
 void Canvas2DRecorderContext::FillImpl(SkPathFillType winding_rule) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kFill, winding_rule);
-  }
   DrawPathInternal(*this, CanvasRenderingContext2DState::kFillPaintType,
                    winding_rule, UsePaintCache::kDisabled);
 }
@@ -1841,27 +1700,16 @@
 
 void Canvas2DRecorderContext::FillPathImpl(Path2D* dom_path,
                                            SkPathFillType winding_rule) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kFill__Path, dom_path->GetIdentifiableToken(), winding_rule);
-  }
   DrawPathInternal(*dom_path, CanvasRenderingContext2DState::kFillPaintType,
                    winding_rule, path2d_use_paint_cache_);
 }
 
 void Canvas2DRecorderContext::stroke() {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kStroke);
-  }
   DrawPathInternal(*this, CanvasRenderingContext2DState::kStrokePaintType,
                    SkPathFillType::kWinding, UsePaintCache::kDisabled);
 }
 
 void Canvas2DRecorderContext::stroke(Path2D* dom_path) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kStroke__Path, dom_path->GetIdentifiableToken());
-  }
   DrawPathInternal(*dom_path, CanvasRenderingContext2DState::kStrokePaintType,
                    SkPathFillType::kWinding, path2d_use_paint_cache_);
 }
@@ -1877,10 +1725,6 @@
   if (!GetOrCreatePaintCanvas()) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kFillRect, x, y,
-                                                width, height);
-  }
 
   // We are assuming that if the pattern is not accelerated and the current
   // canvas is accelerated, the texture of the pattern will not be able to be
@@ -1944,10 +1788,6 @@
   if (!GetOrCreatePaintCanvas()) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kStrokeRect, x, y,
-                                                width, height);
-  }
 
   // clamp to float to avoid float cast overflow when used as SkScalar
   AdjustRectForCanvas(x, y, width, height);
@@ -1996,21 +1836,11 @@
 }
 
 void Canvas2DRecorderContext::clip(const V8CanvasFillRule& winding_rule) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kClip,
-        IdentifiabilitySensitiveStringToken(winding_rule.AsString()));
-  }
   ClipInternal(GetPath(), winding_rule, UsePaintCache::kDisabled);
 }
 
 void Canvas2DRecorderContext::clip(Path2D* dom_path,
                                    const V8CanvasFillRule& winding_rule) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kClip__Path, dom_path->GetIdentifiableToken(),
-        IdentifiabilitySensitiveStringToken(winding_rule.AsString()));
-  }
   ClipInternal(dom_path->GetPath(), winding_rule, path2d_use_paint_cache_);
 }
 
@@ -2125,10 +1955,6 @@
   if (!c->getDeviceClipBounds(&clip_bounds)) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kClearRect, x, y,
-                                                width, height);
-  }
 
   cc::PaintFlags clear_flags = GetClearFlags();
 
@@ -2455,12 +2281,6 @@
   if (src_rect.IsEmpty()) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kDrawImage, fsx, fsy, fsw, fsh, fdx, fdy, fdw, fdh,
-        image ? image->width() : 0, image ? image->height() : 0);
-    identifiability_study_helper_.set_encountered_partially_digested_image();
-  }
 
   ValidateStateStack();
 
@@ -2516,11 +2336,8 @@
   float fx1 = ClampTo<float>(x1);
   float fy1 = ClampTo<float>(y1);
 
-  auto* gradient = MakeGarbageCollected<CanvasGradient>(gfx::PointF(fx0, fy0),
-                                                        gfx::PointF(fx1, fy1));
-  gradient->SetExecutionContext(
-      identifiability_study_helper_.execution_context());
-  return gradient;
+  return MakeGarbageCollected<CanvasGradient>(gfx::PointF(fx0, fy0),
+                                              gfx::PointF(fx1, fy1));
 }
 
 CanvasGradient* Canvas2DRecorderContext::createRadialGradient(
@@ -2552,11 +2369,8 @@
   float fy1 = ClampTo<float>(y1);
   float fr1 = ClampTo<float>(r1);
 
-  auto* gradient = MakeGarbageCollected<CanvasGradient>(
-      gfx::PointF(fx0, fy0), fr0, gfx::PointF(fx1, fy1), fr1);
-  gradient->SetExecutionContext(
-      identifiability_study_helper_.execution_context());
-  return gradient;
+  return MakeGarbageCollected<CanvasGradient>(gfx::PointF(fx0, fy0), fr0,
+                                              gfx::PointF(fx1, fy1), fr1);
 }
 
 CanvasGradient* Canvas2DRecorderContext::createConicGradient(double startAngle,
@@ -2568,8 +2382,6 @@
       !std::isfinite(centerY)) {
     return nullptr;
   }
-  // TODO(crbug.com/40191831): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
 
   // clamp to float to avoid float cast overflow
   float a = ClampTo<float>(startAngle);
@@ -2580,10 +2392,7 @@
   // |startAngle| at 0 starts from x-axis.
   a = Rad2deg(a) + 90;
 
-  auto* gradient = MakeGarbageCollected<CanvasGradient>(a, gfx::PointF(x, y));
-  gradient->SetExecutionContext(
-      identifiability_study_helper_.execution_context());
-  return gradient;
+  return MakeGarbageCollected<CanvasGradient>(a, gfx::PointF(x, y));
 }
 
 CanvasPattern* Canvas2DRecorderContext::createPattern(
@@ -2675,8 +2484,6 @@
   auto* pattern = MakeGarbageCollected<CanvasPattern>(
       std::move(image_for_rendering), repeat_mode, origin_clean,
       source_high_entropy_canvas_op_types);
-  pattern->SetExecutionContext(
-      identifiability_study_helper_.execution_context());
   return pattern;
 }
 
@@ -2849,10 +2656,6 @@
   if (enabled == state.ImageSmoothingEnabled()) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kSetImageSmoothingEnabled, enabled);
-  }
 
   state.SetImageSmoothingEnabled(enabled);
 }
@@ -2868,11 +2671,6 @@
     return;
   }
 
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kSetImageSmoothingQuality,
-        IdentifiabilitySensitiveStringToken(quality.AsString()));
-  }
   state.SetImageSmoothingQuality(quality);
 }
 
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.h
index b40ab91c..2025934 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.h
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_2d_recorder_context.h
@@ -95,8 +95,6 @@
 class Path2D;
 class ScriptState;
 class V8UnionCanvasFilterOrString;
-struct V8CanvasStyle;
-enum class CanvasOps;
 enum class ColorParseResult;
 enum RespectImageOrientationEnum : uint8_t;
 template <typename T>
@@ -662,21 +660,9 @@
 
   virtual std::optional<cc::PaintRecord> FlushCanvas(FlushReason) = 0;
 
-  // Only call if identifiability_study_helper_.ShouldUpdateBuilder() returns
-  // true.
-  void IdentifiabilityUpdateForStyleUnion(const V8CanvasStyle& style);
-
   RespectImageOrientationEnum RespectImageOrientationInternal(
       CanvasImageSource*);
 
-  // Updates the identifiability study before changing stroke or fill styles.
-  void UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill(
-      const V8CanvasStyle& v8_style,
-      CanvasOps op);
-  void UpdateIdentifiabilityStudyBeforeSettingStrokeOrFill(
-      v8::Local<v8::String> v8_string,
-      CanvasOps op);
-
   // Parses the string as a color and returns the result of parsing.
   ColorParseResult ParseColorOrCurrentColor(const String& color_string,
                                             Color& color) const;
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc
index 4b072e35..0be29cc 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc
@@ -26,11 +26,9 @@
 
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h"
 
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_color_interpolation_method.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_hue_interpolation_method.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/platform/bindings/exception_code.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
@@ -108,10 +106,6 @@
                                  Gradient::SpreadMethod::kPad,
                                  Gradient::PremultipliedAlpha::kUnpremultiplied,
                                  Gradient::DegenerateHandling::kDisallow)) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kCreateLinearGradient, p0.x(), p0.y(), p1.x(), p1.y());
-  }
 }
 
 CanvasGradient::CanvasGradient(const gfx::PointF& p0,
@@ -127,11 +121,6 @@
                                  Gradient::SpreadMethod::kPad,
                                  Gradient::PremultipliedAlpha::kUnpremultiplied,
                                  Gradient::DegenerateHandling::kDisallow)) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kCreateRadialGradient, p0.x(), p0.y(), r0, p1.x(), p1.y(),
-        r1);
-  }
 }
 
 // CanvasRenderingContext2D.createConicGradient only takes one angle argument
@@ -164,22 +153,10 @@
                                           "') could not be parsed as a color.");
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kAddColorStop, value,
-                                                color.Rgb());
-  }
 
   gradient_->AddColorStop(value, color);
 }
 
-IdentifiableToken CanvasGradient::GetIdentifiableToken() const {
-  return identifiability_study_helper_.GetToken();
-}
-
-void CanvasGradient::SetExecutionContext(ExecutionContext* context) {
-  identifiability_study_helper_.SetExecutionContext(context);
-}
-
 void CanvasGradient::setColorInterpolationMethod(
     const V8ColorInterpolationMethod& color_interpolation_method) {
   color_interpolation_method_ = color_interpolation_method;
@@ -198,9 +175,4 @@
           hue_interpolation_method_));
 }
 
-void CanvasGradient::Trace(Visitor* visitor) const {
-  visitor->Trace(identifiability_study_helper_);
-  ScriptWrappable::Trace(visitor);
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h
index 5cfa29e..ca910139 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h
@@ -28,10 +28,8 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_CANVAS_GRADIENT_H_
 
 #include "base/memory/scoped_refptr.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_color_interpolation_method.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_hue_interpolation_method.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/graphics/gradient.h"
@@ -47,7 +45,6 @@
 namespace blink {
 
 class ExceptionState;
-class ExecutionContext;
 
 class MODULES_EXPORT CanvasGradient final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
@@ -67,13 +64,6 @@
 
   void addColorStop(double value, const String& color, ExceptionState&);
 
-  IdentifiableToken GetIdentifiableToken() const;
-
-  // Sets on internal IdentifiabilityStudyHelper.
-  void SetExecutionContext(ExecutionContext*);
-
-  void Trace(Visitor* visitor) const override;
-
   V8ColorInterpolationMethod colorInterpolationMethod() const {
     return color_interpolation_method_;
   }
@@ -94,7 +84,6 @@
 
  private:
   scoped_refptr<Gradient> gradient_;
-  IdentifiabilityStudyHelper identifiability_study_helper_;
 
   V8ColorInterpolationMethod color_interpolation_method_{
       V8ColorInterpolationMethod::Enum::kSRGB};
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc
index 9dcf2d22..724f2a7 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc
@@ -48,7 +48,6 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_union_dompointinit_unrestricteddouble.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"  // IWYU pragma: keep (https://github.com/clangd/clangd/issues/2044)
 #include "third_party/blink/renderer/core/frame/web_feature.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/platform/bindings/exception_code.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/geometry/float_rounded_rect.h"
@@ -57,7 +56,6 @@
 #include "third_party/blink/renderer/platform/graphics/canvas_high_entropy_op_type.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
-#include "third_party/blink/renderer/platform/heap/visitor.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/transforms/affine_transform.h"
@@ -88,9 +86,6 @@
     return;
   }
 
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kClosePath);
-  }
   if (IsArc()) {
     // Only the first close does something.
     if (!arc_builder_.IsClosed()) {
@@ -109,10 +104,6 @@
   if (!std::isfinite(x) || !std::isfinite(y)) [[unlikely]] {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kMoveTo, double_x,
-                                                double_y);
-  }
   gfx::PointF point(x, y);
   if (!IsTransformInvertible()) [[unlikely]] {
     point = GetTransform().MapPoint(point);
@@ -131,10 +122,6 @@
   if (!std::isfinite(x) || !std::isfinite(y)) [[unlikely]] {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kLineTo, double_x,
-                                                double_y);
-  }
   gfx::PointF p1(x, y);
 
   if (!IsTransformInvertible()) [[unlikely]] {
@@ -171,11 +158,6 @@
     return;
   }
   UpdatePathFromLineOrArcIfNecessaryForMutation();
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kQuadradicCurveTo,
-                                                double_cpx, double_cpy,
-                                                double_x, double_y);
-  }
   gfx::PointF p1(x, y);
   gfx::PointF cp(cpx, cpy);
 
@@ -209,11 +191,6 @@
     return;
   }
   UpdatePathFromLineOrArcIfNecessaryForMutation();
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kBezierCurveTo, double_cp1x, double_cp1y, double_cp2x,
-        double_cp2y, double_x, double_y);
-  }
 
   gfx::PointF p1(x, y);
   gfx::PointF cp1(cp1x, cp1y);
@@ -254,11 +231,6 @@
     return;
   }
   UpdatePathFromLineOrArcIfNecessaryForMutation();
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(CanvasOps::kArcTo, double_x1,
-                                                double_y1, double_x2, double_y2,
-                                                double_r);
-  }
 
   gfx::PointF p1(x1, y1);
   gfx::PointF p2(x2, y2);
@@ -475,11 +447,6 @@
   }
 
   UpdatePathFromLineOrArcIfNecessaryForMutation();
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kArc, double_x, double_y, double_radius, double_start_angle,
-        double_end_angle, anticlockwise);
-  }
   high_entropy_path_op_types_ |= HighEntropyCanvasOpType::kArc;
 
   if (!radius || start_angle == end_angle) [[unlikely]] {
@@ -547,12 +514,6 @@
   }
 
   UpdatePathFromLineOrArcIfNecessaryForMutation();
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kEllipse, double_x, double_y, double_radius_x,
-        double_radius_y, double_rotation, double_start_angle, double_end_angle,
-        anticlockwise);
-  }
 
   CanonicalizeAngle(&start_angle, &end_angle);
   float adjusted_end_angle =
@@ -593,10 +554,6 @@
     return;
   }
   UpdatePathFromLineOrArcIfNecessaryForMutation();
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kRect, double_x, double_y, double_width, double_height);
-  }
 
   path_builder_.AddRect(gfx::PointF(x, y), gfx::PointF(x + width, y + height));
 }
@@ -632,8 +589,6 @@
     return;
   }
   UpdatePathFromLineOrArcIfNecessaryForMutation();
-  // TODO(crbug.com/1234113): Instrument new canvas APIs.
-  identifiability_study_helper_.set_encountered_skipped_ops();
 
   std::array<gfx::SizeF, kMaxRadii> r;
   for (int i = 0; i < num_radii; ++i) {
@@ -761,10 +716,6 @@
   return path_builder_.BoundingRect();
 }
 
-void CanvasPath::Trace(Visitor* visitor) const {
-  visitor->Trace(identifiability_study_helper_);
-}
-
 ALWAYS_INLINE gfx::RectF CanvasPath::LineBuilder::BoundingRect() const {
   DCHECK_NE(state_, State::kEmpty);
   if (state_ == State::kStartingPoint) {
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h
index 50fb811..28cce1c 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h
@@ -33,9 +33,7 @@
 #include "base/check.h"
 #include "base/check_op.h"
 #include "base/compiler_specific.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_union_dompointinit_unrestricteddouble.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/geometry/path.h"
 #include "third_party/blink/renderer/platform/geometry/path_builder.h"
@@ -138,10 +136,6 @@
     return AffineTransform();
   }
 
-  IdentifiableToken GetIdentifiableToken() const {
-    return identifiability_study_helper_.GetToken();
-  }
-
   // Returns the path types that would result in a high entropy canvas operation
   // when these are drawn on the canvas. Because of the high entropy associated
   // with the operation, this reveals information about the user's device and
@@ -190,8 +184,6 @@
   // than necessary.
   gfx::RectF BoundingRect() const;
 
-  void Trace(Visitor*) const override;
-
  protected:
   CanvasPath() { path_builder_.SetIsVolatile(true); }
   explicit CanvasPath(const Path& path) : path_builder_(path) {
@@ -219,8 +211,6 @@
   // code paths that handle non-invertible transforms.
   bool is_transform_invertible_ = true;
 
-  IdentifiabilityStudyHelper identifiability_study_helper_;
-
   // The path types that would result in a high entropy canvas operation when
   // these are drawn on the canvas. These could be used for fingerprinting.
   HighEntropyCanvasOpType high_entropy_path_op_types_ =
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc
index afd9810..65ca982a 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc
@@ -27,9 +27,7 @@
 
 #include "base/compiler_specific.h"
 #include "base/memory/scoped_refptr.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/core/geometry/dom_matrix_read_only.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/platform/bindings/exception_code.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
@@ -74,11 +72,6 @@
     : pattern_(Pattern::CreateImagePattern(image, repeat)),
       origin_clean_(origin_clean),
       high_entropy_canvas_op_types_(high_entropy_canvas_op_types) {
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(
-        CanvasOps::kCreatePattern, image ? image->width() : 0,
-        image ? image->height() : 0, repeat);
-  }
 }
 
 void CanvasPattern::setTransform(DOMMatrix2DInit* transform,
@@ -89,25 +82,7 @@
   if (!m) {
     return;
   }
-  if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-    identifiability_study_helper_.UpdateBuilder(m->m11(), m->m12(), m->m21(),
-                                                m->m22(), m->m41(), m->m42());
-  }
-
   pattern_transform_ = m->GetAffineTransform();
 }
 
-IdentifiableToken CanvasPattern::GetIdentifiableToken() const {
-  return identifiability_study_helper_.GetToken();
-}
-
-void CanvasPattern::SetExecutionContext(ExecutionContext* context) {
-  identifiability_study_helper_.SetExecutionContext(context);
-}
-
-void CanvasPattern::Trace(Visitor* visitor) const {
-  visitor->Trace(identifiability_study_helper_);
-  ScriptWrappable::Trace(visitor);
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h
index 825405d..6d72456 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h
@@ -28,7 +28,6 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/graphics/canvas_high_entropy_op_type.h"
@@ -43,7 +42,6 @@
 
 class DOMMatrix2DInit;
 class ExceptionState;
-class ExecutionContext;
 class Image;
 
 class MODULES_EXPORT CanvasPattern final : public ScriptWrappable {
@@ -72,19 +70,11 @@
 
   void setTransform(DOMMatrix2DInit*, ExceptionState&);
 
-  IdentifiableToken GetIdentifiableToken() const;
-
-  // Sets on internal IdentifiabilityStudyHelper.
-  void SetExecutionContext(ExecutionContext*);
-
-  void Trace(Visitor* visitor) const override;
-
  private:
   scoped_refptr<Pattern> pattern_;
   AffineTransform pattern_transform_;
   const bool origin_clean_;
   const HighEntropyCanvasOpType high_entropy_canvas_op_types_;
-  IdentifiabilityStudyHelper identifiability_study_helper_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
index 6973792..569e695 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
@@ -59,7 +59,6 @@
 #include "gpu/command_buffer/common/shared_image_usage.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/metrics/document_update_reason.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/public/mojom/frame/color_scheme.mojom-blink.h"
 #include "third_party/blink/public/mojom/scroll/scroll_enums.mojom-blink.h"
 #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h"
@@ -202,8 +201,6 @@
           attrs,
           canvas->GetDocument().GetTaskRunner(TaskType::kInternalDefault)),
       should_prune_local_font_cache_(false) {
-  identifiability_study_helper_.SetExecutionContext(
-      canvas->GetTopExecutionContext());
   if (canvas->GetDocument().GetSettings() &&
       canvas->GetDocument().GetSettings()->GetAntialiasedClips2dCanvasEnabled())
     clip_antialiasing_ = kAntiAliased;
@@ -1042,14 +1039,11 @@
 
 void CanvasRenderingContext2D::drawFocusIfNeeded(Path2D* path2d,
                                                  Element* element) {
-  DrawFocusIfNeededInternal(path2d->GetPath(), element,
-                            path2d->GetIdentifiableToken());
+  DrawFocusIfNeededInternal(path2d->GetPath(), element);
 }
 
-void CanvasRenderingContext2D::DrawFocusIfNeededInternal(
-    const Path& path,
-    Element* element,
-    IdentifiableToken path_token) {
+void CanvasRenderingContext2D::DrawFocusIfNeededInternal(const Path& path,
+                                                         Element* element) {
   if (!FocusRingCallIsValid(path, element))
     return;
 
@@ -1057,10 +1051,6 @@
   // element->focused(), because element->focused() isn't updated until after
   // focus events fire.
   if (element->GetDocument().FocusedElement() == element) {
-    if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-      identifiability_study_helper_.UpdateBuilder(CanvasOps::kDrawFocusIfNeeded,
-                                                  path_token);
-    }
     ScrollPathIntoViewInternal(path);
     DrawFocusRing(path, element);
   }
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h
index 9bc8b451..55a1cf7 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h
@@ -35,7 +35,6 @@
 #include "base/check.h"
 #include "base/memory/scoped_refptr.h"
 #include "cc/paint/paint_record.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h"
 #include "third_party/blink/renderer/core/html/canvas/canvas_performance_monitor.h"
 #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h"
@@ -45,7 +44,6 @@
 #include "third_party/blink/renderer/core/style/filter_operations.h"
 #include "third_party/blink/renderer/core/svg/svg_resource_client.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/fonts/font_description.h"
@@ -246,24 +244,8 @@
                                   ImageDataSettings*,
                                   ExceptionState&) final;
 
-  IdentifiableToken IdentifiableTextToken() const override {
-    return identifiability_study_helper_.GetToken();
-  }
-
-  bool IdentifiabilityEncounteredSkippedOps() const override {
-    return identifiability_study_helper_.encountered_skipped_ops();
-  }
-
-  bool IdentifiabilityEncounteredSensitiveOps() const override {
-    return identifiability_study_helper_.encountered_sensitive_ops();
-  }
-
   void SendContextLostEventIfNeeded() override;
 
-  bool IdentifiabilityEncounteredPartiallyDigestedImage() const override {
-    return identifiability_study_helper_.encountered_partially_digested_image();
-  }
-
   CanvasResourceProvider* GetOrCreateResourceProvider() override;
   void SetCanvas2DResourceProviderForTesting(
       std::unique_ptr<CanvasResourceProvider> provider,
@@ -319,10 +301,7 @@
 
   void ScrollPathIntoViewInternal(const Path&);
 
-  void DrawFocusIfNeededInternal(
-      const Path&,
-      Element*,
-      IdentifiableToken path_hash = IdentifiableToken());
+  void DrawFocusIfNeededInternal(const Path&, Element*);
   bool FocusRingCallIsValid(const Path&, Element*);
   void DrawFocusRing(const Path&, Element*);
   void UpdateElementAccessibility(const Path&, Element*);
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc
index f8e1a3ea..43445c6 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc
@@ -6,7 +6,6 @@
 #include <stdint.h>
 
 #include <algorithm>
-#include <memory>
 #include <vector>
 
 #include "base/memory/scoped_refptr.h"
@@ -14,15 +13,9 @@
 #include "cc/paint/refcounted_buffer.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings_provider.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_blob_callback.h"
-#include "third_party/blink/renderer/bindings/core/v8/v8_canvas_text_align.h"
-#include "third_party/blink/renderer/bindings/core/v8/v8_canvas_text_baseline.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_image_bitmap_options.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_image_data_settings.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_union_float16array_float32array_uint8clampedarray.h"  // IWYU pragma: keep
@@ -43,7 +36,6 @@
 #include "third_party/blink/renderer/core/typed_arrays/dom_typed_array.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_style_test_utils.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_index_buffer.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_uv_buffer.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/mesh_2d_vertex_buffer.h"
@@ -585,340 +577,6 @@
   EXPECT_TRUE(canvas->RenderingContext()->IsRenderingContext2D());
 }
 
-// A IdentifiabilityStudySettingsProvider implementation that opts-into study
-// participation.
-class ActiveSettingsProvider : public IdentifiabilityStudySettingsProvider {
- public:
-  explicit ActiveSettingsProvider(bool enabled) : enabled_(enabled) {}
-  bool IsMetaExperimentActive() const override { return false; }
-  bool IsActive() const override { return enabled_; }
-  bool IsAnyTypeOrSurfaceBlocked() const override { return false; }
-  bool IsSurfaceAllowed(IdentifiableSurface surface) const override {
-    return true;
-  }
-  bool IsTypeAllowed(IdentifiableSurface::Type type) const override {
-    return true;
-  }
-
- private:
-  const bool enabled_ = true;
-};
-
-// An RAII class that opts into study participation using
-// ActiveSettingsProvider.
-class StudyParticipationRaii {
- public:
-  explicit StudyParticipationRaii(bool enabled = true) {
-    IdentifiabilityStudySettings::SetGlobalProvider(
-        std::make_unique<ActiveSettingsProvider>(enabled));
-  }
-  ~StudyParticipationRaii() {
-    IdentifiabilityStudySettings::ResetStateForTesting();
-  }
-};
-
-TEST_F(CanvasRenderingContext2DAPITest, IdentifiabilityStudyMaxOperations) {
-  StudyParticipationRaii study_participation_raii;
-  constexpr int kMaxOperations = 5;
-  IdentifiabilityStudyHelper::ScopedMaxOperationsSetter max_operations_setter(
-      kMaxOperations);
-  CreateContext(kNonOpaque);
-
-  int64_t last_digest = INT64_C(0);
-  for (int i = 0; i < kMaxOperations; i++) {
-    Context2D()->setFont("Arial");
-    EXPECT_NE(last_digest,
-              Context2D()->IdentifiableTextToken().ToUkmMetricValue())
-        << i;
-    last_digest = Context2D()->IdentifiableTextToken().ToUkmMetricValue();
-  }
-
-  Context2D()->setFont("Arial");
-  EXPECT_EQ(last_digest,
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-// TODO(crbug.com/1239374): Fix test on Android L and re-enable.
-// TODO(crbug.com/1258605): Fix test on Windows and re-enable.
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
-#define MAYBE_IdentifiabilityStudyDigest_Font \
-  DISABLED_IdentifiabilityStudyDigest_Font
-#else
-#define MAYBE_IdentifiabilityStudyDigest_Font IdentifiabilityStudyDigest_Font
-#endif  // BUILDFLAG(IS_ANDROID)
-
-TEST_F(CanvasRenderingContext2DAPITest, MAYBE_IdentifiabilityStudyDigest_Font) {
-  StudyParticipationRaii study_participation_raii;
-  CreateContext(kNonOpaque);
-
-  Context2D()->setFont("Arial");
-  EXPECT_EQ(INT64_C(7339381412423806682),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-TEST_F(CanvasRenderingContext2DAPITest, IdentifiabilityStudyDisabled) {
-  StudyParticipationRaii study_participation_raii(/*enabled=*/false);
-  constexpr int64_t kTokenBuilderInitialDigest = INT64_C(6544625333304541877);
-
-  CreateContext(kNonOpaque);
-
-  Context2D()->setFont("Arial");
-  EXPECT_EQ(kTokenBuilderInitialDigest,
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-// TODO(crbug.com/1239374): Fix test on Android and re-enable.
-// TODO(crbug.com/1258605): Fix test on Windows and re-enable.
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
-#define MAYBE_IdentifiabilityStudyDigest_StrokeText \
-  DISABLED_IdentifiabilityStudyDigest_StrokeText
-#else
-#define MAYBE_IdentifiabilityStudyDigest_StrokeText \
-  IdentifiabilityStudyDigest_StrokeText
-#endif  // BUILDFLAG(IS_ANDROID)
-
-TEST_F(CanvasRenderingContext2DAPITest,
-       MAYBE_IdentifiabilityStudyDigest_StrokeText) {
-  StudyParticipationRaii study_participation_raii;
-  CreateContext(kNonOpaque);
-
-  Context2D()->strokeText("Sensitive message", 1.0, 1.0);
-  EXPECT_EQ(INT64_C(8218678546639211996),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-// TODO(crbug.com/1239374): Fix test on Android and re-enable.
-// TODO(crbug.com/1258605): Fix test on Windows and re-enable.
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
-#define MAYBE_IdentifiabilityStudyDigest_FillText \
-  DISABLED_IdentifiabilityStudyDigest_FillText
-#else
-#define MAYBE_IdentifiabilityStudyDigest_FillText \
-  IdentifiabilityStudyDigest_FillText
-#endif  // BUILDFLAG(IS_ANDROID)
-
-TEST_F(CanvasRenderingContext2DAPITest,
-       MAYBE_IdentifiabilityStudyDigest_FillText) {
-  StudyParticipationRaii study_participation_raii;
-  CreateContext(kNonOpaque);
-
-  Context2D()->fillText("Sensitive message", 1.0, 1.0);
-  EXPECT_EQ(INT64_C(-7525055925911674050),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-// TODO(crbug.com/1239374): Fix test on Android and re-enable.
-// TODO(crbug.com/1258605): Fix test on Windows and re-enable.
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
-#define MAYBE_IdentifiabilityStudyDigest_TextAlign \
-  DISABLED_IdentifiabilityStudyDigest_TextAlign
-#else
-#define MAYBE_IdentifiabilityStudyDigest_TextAlign \
-  IdentifiabilityStudyDigest_TextAlign
-#endif  // BUILDFLAG(IS_ANDROID)
-
-TEST_F(CanvasRenderingContext2DAPITest,
-       MAYBE_IdentifiabilityStudyDigest_TextAlign) {
-  StudyParticipationRaii study_participation_raii;
-  CreateContext(kNonOpaque);
-
-  Context2D()->setTextAlign(
-      V8CanvasTextAlign(V8CanvasTextAlign::Enum::kCenter));
-  EXPECT_EQ(INT64_C(-5618040280239325003),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-// TODO(crbug.com/1239374): Fix test on Android and re-enable.
-// TODO(crbug.com/1258605): Fix test on Windows and re-enable.
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
-#define MAYBE_IdentifiabilityStudyDigest_TextBaseline \
-  DISABLED_IdentifiabilityStudyDigest_TextBaseline
-#else
-#define MAYBE_IdentifiabilityStudyDigest_TextBaseline \
-  IdentifiabilityStudyDigest_TextBaseline
-#endif  // BUILDFLAG(IS_ANDROID)
-
-TEST_F(CanvasRenderingContext2DAPITest,
-       MAYBE_IdentifiabilityStudyDigest_TextBaseline) {
-  StudyParticipationRaii study_participation_raii;
-  CreateContext(kNonOpaque);
-
-  Context2D()->setTextBaseline(
-      V8CanvasTextBaseline(V8CanvasTextBaseline::Enum::kTop));
-  EXPECT_EQ(INT64_C(-6814889525293785691),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-// TODO(crbug.com/1239374): Fix test on Android and re-enable.
-// TODO(crbug.com/1258605): Fix test on Windows and re-enable.
-// TODO(crbug.com/392441189): Re-enable test with new V8 string hash.
-#if true || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
-#define MAYBE_IdentifiabilityStudyDigest_StrokeStyle \
-  DISABLED_IdentifiabilityStudyDigest_StrokeStyle
-#else
-#define MAYBE_IdentifiabilityStudyDigest_StrokeStyle \
-  IdentifiabilityStudyDigest_StrokeStyle
-#endif  // BUILDFLAG(IS_ANDROID)
-
-TEST_F(CanvasRenderingContext2DAPITest,
-       MAYBE_IdentifiabilityStudyDigest_StrokeStyle) {
-  v8::HandleScope handle_scope(GetIsolate());
-  StudyParticipationRaii study_participation_raii;
-  CreateContext(kNonOpaque);
-
-  SetStrokeStyleString(Context2D(), GetScriptState(), "blue");
-  EXPECT_EQ(INT64_C(3577524355478740727),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-// TODO(crbug.com/1239374): Fix test on Android and re-enable.
-// TODO(crbug.com/1258605): Fix test on Windows and re-enable.
-// TODO(crbug.com/392441189): Re-enable test with new V8 string hash.
-#if true || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
-#define MAYBE_IdentifiabilityStudyDigest_FillStyle \
-  DISABLED_IdentifiabilityStudyDigest_FillStyle
-#else
-#define MAYBE_IdentifiabilityStudyDigest_FillStyle \
-  IdentifiabilityStudyDigest_FillStyle
-#endif  // BUILDFLAG(IS_ANDROID)
-
-TEST_F(CanvasRenderingContext2DAPITest,
-       MAYBE_IdentifiabilityStudyDigest_FillStyle) {
-  v8::HandleScope handle_scope(GetIsolate());
-  StudyParticipationRaii study_participation_raii;
-  CreateContext(kNonOpaque);
-
-  SetFillStyleString(Context2D(), GetScriptState(), "blue");
-  EXPECT_EQ(INT64_C(7953663110297373742),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-// TODO(crbug.com/1239374): Fix test on Android and re-enable.
-// TODO(crbug.com/1258605): Fix test on Windows and re-enable.
-// TODO(crbug.com/392441189): Re-enable test with new V8 string hash.
-#if true || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
-#define MAYBE_IdentifiabilityStudyDigest_Combo \
-  DISABLED_IdentifiabilityStudyDigest_Combo
-#else
-#define MAYBE_IdentifiabilityStudyDigest_Combo IdentifiabilityStudyDigest_Combo
-#endif  // BUILDFLAG(IS_ANDROID)
-
-TEST_F(CanvasRenderingContext2DAPITest,
-       MAYBE_IdentifiabilityStudyDigest_Combo) {
-  v8::HandleScope handle_scope(GetIsolate());
-  StudyParticipationRaii study_participation_raii;
-  CreateContext(kNonOpaque);
-
-  Context2D()->fillText("Sensitive message", 1.0, 1.0);
-  EXPECT_EQ(INT64_C(-7525055925911674050),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-  Context2D()->setFont("Helvetica");
-  Context2D()->setTextBaseline(
-      V8CanvasTextBaseline(V8CanvasTextBaseline::Enum::kBottom));
-  Context2D()->setTextAlign(V8CanvasTextAlign(V8CanvasTextAlign::Enum::kRight));
-  SetFillStyleString(Context2D(), GetScriptState(), "red");
-  Context2D()->fillText("Bye", 4.0, 3.0);
-  EXPECT_EQ(INT64_C(-7631959002534825456),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-// TODO(crbug.com/1239374): Fix test on Android L and re-enable.
-// TODO(crbug.com/1258605): Fix test on Windows and re-enable.
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
-#define MAYBE_IdentifiabilityStudyDigest_putImageData \
-  DISABLED_IdentifiabilityStudyDigest_putImageData
-#else
-#define MAYBE_IdentifiabilityStudyDigest_putImageData \
-  IdentifiabilityStudyDigest_putImageData
-#endif  // BUILDFLAG(IS_ANDROID)
-
-TEST_F(CanvasRenderingContext2DAPITest,
-       MAYBE_IdentifiabilityStudyDigest_putImageData) {
-  StudyParticipationRaii study_participation_raii;
-  CreateContext(kNonOpaque);
-  NonThrowableExceptionState exception_state;
-
-  ImageData* image_data =
-      Context2D()->createImageData(/*sw=*/1, /*sh=*/1, exception_state);
-  EXPECT_FALSE(exception_state.HadException());
-  Context2D()->putImageData(image_data, /*dx=*/1, /*dy=*/1, exception_state);
-  EXPECT_EQ(INT64_C(-4824069156106343739),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
-// TODO(crbug.com/1239374): Fix test on Android L and re-enable.
-// TODO(crbug.com/1258605): Fix test on Windows and re-enable.
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
-#define MAYBE_IdentifiabilityStudyDigest_drawImage \
-  DISABLED_IdentifiabilityStudyDigest_drawImage
-#else
-#define MAYBE_IdentifiabilityStudyDigest_drawImage \
-  IdentifiabilityStudyDigest_drawImage
-#endif  // BUILDFLAG(IS_ANDROID)
-
-TEST_F(CanvasRenderingContext2DAPITest,
-       MAYBE_IdentifiabilityStudyDigest_drawImage) {
-  StudyParticipationRaii study_participation_raii;
-  CreateContext(kNonOpaque);
-  NonThrowableExceptionState exception_state;
-
-  // We can use our own canvas as the image source!
-  auto* image_source =
-      MakeGarbageCollected<V8CanvasImageSource>(&CanvasElement());
-  Context2D()->drawImage(image_source, /*x=*/1,
-                         /*y=*/1, exception_state);
-  EXPECT_EQ(INT64_C(-4851825694092845811),
-            Context2D()->IdentifiableTextToken().ToUkmMetricValue());
-
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSkippedOps());
-  EXPECT_FALSE(Context2D()->IdentifiabilityEncounteredSensitiveOps());
-  EXPECT_TRUE(Context2D()->IdentifiabilityEncounteredPartiallyDigestedImage());
-}
-
 using testing::ElementsAre;
 using testing::IsNull;
 using testing::Pointee;
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.cc b/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.cc
deleted file mode 100644
index 5065ff2..0000000
--- a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
-
-#include <cstdint>
-#include <initializer_list>
-
-#include "base/containers/span.h"
-#include "base/hash/legacy_hash.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
-#include "third_party/blink/renderer/platform/heap/visitor.h"
-
-namespace blink {
-
-// The maximum number of canvas context operations to incorportate into digest
-// computation -- constant, but may be overridden by tests using
-// IdentifiabilityStudyHelper::ScopedMaxOperationsSetter.
-/*static*/ int IdentifiabilityStudyHelper::max_operations_ = 1 << 20;
-
-void IdentifiabilityStudyHelper::Trace(Visitor* visitor) const {
-  visitor->Trace(execution_context_);
-}
-
-void IdentifiabilityStudyHelper::AddTokens(
-    std::initializer_list<IdentifiableToken> tokens) {
-  for (IdentifiableToken token : tokens) {
-    partial_[position_++] = token.ToUkmMetricValue();
-    if (position_ == 8) {
-      chaining_value_ = DigestPartialData();
-      position_ = 0;
-    }
-  }
-}
-
-uint64_t IdentifiabilityStudyHelper::DigestPartialData() const {
-  return base::legacy::CityHash64WithSeed(
-      base::as_bytes(base::span(partial_).first(position_)), chaining_value_);
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h b/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h
deleted file mode 100644
index 6c71950..0000000
--- a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_IDENTIFIABILITY_STUDY_HELPER_H_
-#define THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_IDENTIFIABILITY_STUDY_HELPER_H_
-
-#include <stdint.h>
-
-#include <array>
-#include <initializer_list>
-
-#include "base/compiler_specific.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
-#include "third_party/blink/renderer/core/execution_context/execution_context.h"
-#include "third_party/blink/renderer/modules/modules_export.h"
-#include "third_party/blink/renderer/platform/heap/forward.h"  // IWYU pragma: keep (blink::Visitor)
-#include "third_party/blink/renderer/platform/heap/member.h"
-#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
-
-// https://github.com/include-what-you-use/include-what-you-use/issues/1546
-// IWYU pragma: no_forward_declare internal::__thisIsHereToForceASemicolonAfterThisMacro
-
-// IWYU pragma: no_include "third_party/blink/renderer/platform/heap/visitor.h"
-
-namespace blink {
-
-// Text operations supported on different canvas types; the intent is to use
-// these values (and any input supplied to these operations) to build a running
-// hash that reprensents the sequence of text operations performed on the
-// canvas. A hash of all other canvas operations is maintained by hashing the
-// serialized PaintOps produced by the canvas in CanvasResourceProvider.
-//
-// If a canvas method to exfiltrate the canvas buffer is called by a script
-// (getData(), etc.), this hash will be uploaded to UKM along with a hash of the
-// canvas buffer data.
-//
-// **Don't renumber after the privacy budget study has started to ensure
-// consistency.**
-enum class CanvasOps {
-  // CanvasPath operations.
-  kClosePath = 0,
-  kMoveTo,
-  kLineTo,
-  kQuadradicCurveTo,
-  kBezierCurveTo,
-  kArcTo,
-  kArc,
-  kEllipse,
-  kRect,
-  // Path2D operations.
-  kAddPath,
-  // Canvas2DRecorderContext methods.
-  kSetStrokeStyle,
-  kSetFillStyle,
-  kSetLineWidth,
-  kSetLineCap,
-  kSetLineJoin,
-  kSetMiterLimit,
-  kSetLineDash,
-  kSetLineDashOffset,
-  kSetShadowOffsetX,
-  kSetShadowOffsetY,
-  kSetShadowBlur,
-  kSetShadowColor,
-  kSetGlobalAlpha,
-  kSetGlobalCompositeOpertion,
-  kSetFilter,
-  kSave,
-  kRestore,
-  kScale,
-  kRotate,
-  kTranslate,
-  kTransform,
-  kResetTransform,
-  kBeginPath,
-  kFill,
-  kFill__Path,
-  kStroke,
-  kStroke__Path,
-  kClip,
-  kClip__Path,
-  kClearRect,
-  kFillRect,
-  kStrokeRect,
-  kDrawImage,
-  kCreateLinearGradient,
-  kCreateRadialGradient,
-  kCreatePattern,
-  kPutImageData,
-  kSetImageSmoothingEnabled,
-  kSetImageSmoothingQuality,
-  kSetTextAlign,
-  kSetTextBaseline,
-  kReset,
-  // CanvasRenderingContext2D / OffscreenCanvasRenderingContext2D methods.
-  kSetFont,
-  kFillText,
-  kStrokeText,
-  kDrawFocusIfNeeded,  // CanvasRenderingContext2D only.
-  // CanvasGradient methods.
-  kAddColorStop,
-};
-
-// A helper class to simplify maintaining the current text digest for the canvas
-// context. An operation count is also maintained to limit the performance
-// impact of the study.
-class IdentifiabilityStudyHelper final {
-  DISALLOW_NEW();
-
- public:
-  // UpdateBuilder() should be called iff ShouldUpdateBuilder() is true, to
-  // avoid unnecessary copies of parameters and hashing when GetToken() won't be
-  // called.
-  ALWAYS_INLINE bool ShouldUpdateBuilder() {
-    if (!is_canvas_type_allowed_) [[likely]] {
-      return false;
-    }
-    if (!execution_context_ ||
-        execution_context_->IsInRequestAnimationFrame() ||
-        operation_count_ >= max_operations_) {
-      encountered_skipped_ops_ = true;
-      return false;
-    }
-    return true;
-  }
-
-  // Do *not* call this method if ShouldUpdateBuilder() is false -- updates
-  // the internal digest based on the series of digestable parameters.
-  template <typename... Ts>
-  void UpdateBuilder(Ts... tokens) {
-    AddTokens({tokens...});
-    operation_count_++;
-  }
-
-  // Returns an IdentifiableToken representing the internal computed digest.
-  IdentifiableToken GetToken() const {
-    if (position_ == 0) {
-      return chaining_value_;
-    }
-    return DigestPartialData();
-  }
-
-  [[nodiscard]] bool encountered_skipped_ops() const {
-    return encountered_skipped_ops_;
-  }
-
-  [[nodiscard]] bool encountered_sensitive_ops() const {
-    return encountered_sensitive_ops_;
-  }
-
-  [[nodiscard]] bool encountered_partially_digested_image() const {
-    return encountered_partially_digested_image_;
-  }
-
-  void set_encountered_skipped_ops() { encountered_skipped_ops_ = true; }
-
-  void set_encountered_sensitive_ops() { encountered_sensitive_ops_ = true; }
-
-  void set_encountered_partially_digested_image() {
-    encountered_partially_digested_image_ = true;
-  }
-
-  void SetExecutionContext(ExecutionContext* context) {
-    execution_context_ = context;
-  }
-
-  ExecutionContext* execution_context() const {
-    return execution_context_.Get();
-  }
-
-  // For testing, allows scoped changing the max number of operations for all
-  // IdentifiabilityStudyHelper instances.
-  class ScopedMaxOperationsSetter {
-   public:
-    explicit ScopedMaxOperationsSetter(int new_value)
-        : old_max_operations_(IdentifiabilityStudyHelper::max_operations_) {
-      IdentifiabilityStudyHelper::max_operations_ = new_value;
-    }
-    ~ScopedMaxOperationsSetter() {
-      IdentifiabilityStudyHelper::max_operations_ = old_max_operations_;
-    }
-
-   private:
-    const int old_max_operations_;
-  };
-
-  void Trace(Visitor* visitor) const;
-
- private:
-  // Note that primitives are implicitly converted to IdentifiableTokens.
-  void MODULES_EXPORT
-  AddTokens(std::initializer_list<IdentifiableToken> tokens);
-
-  uint64_t MODULES_EXPORT DigestPartialData() const;
-
-  const bool is_canvas_type_allowed_ =
-      IdentifiabilityStudySettings::Get()->ShouldSampleType(
-          blink::IdentifiableSurface::Type::kCanvasReadback);
-
-  Member<ExecutionContext> execution_context_;
-
-  static MODULES_EXPORT int max_operations_;
-
-  int operation_count_ = 0;
-
-  // If true, at least one op was skipped completely, for performance reasons.
-  bool encountered_skipped_ops_ = false;
-
-  // If true, encountered at least one "sensitive" operation -- for instance,
-  // strings may contain PII, so we only use a 16-bit digest for such strings.
-  //
-  // This must be set manually by calling set_encountered_sensitive_ops().
-  bool encountered_sensitive_ops_ = false;
-
-  // If true, at least one op was partially-digested -- for instance, images
-  // drawn to the canvas have their width, height, etc. digested, but not the
-  // image contents, for performance and complexity reasons.
-  bool encountered_partially_digested_image_ = false;
-
-  std::array<int64_t, 8> partial_;
-  wtf_size_t position_ = 0;
-  uint64_t chaining_value_ = IdentifiableTokenBuilder::kChainingValueSeed;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_IDENTIFIABILITY_STUDY_HELPER_H_
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper_test.cc b/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper_test.cc
deleted file mode 100644
index e90b64f..0000000
--- a/third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper_test.cc
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2024 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
-
-#include <stdint.h>
-
-#include <array>
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
-
-// GoogleTest macros trigger a bug in IWYU:
-// https://github.com/include-what-you-use/include-what-you-use/issues/1546
-// IWYU pragma: no_include <string>
-
-namespace blink {
-
-namespace {
-constexpr uint64_t max_uint = UINT64_C(0xFFFFFFFFFFFFFFFF);
-}
-
-TEST(IdentifiabilityStudyHelperTest, GetTokenTwice) {
-  IdentifiabilityStudyHelper helper;
-  helper.UpdateBuilder(1246);
-  EXPECT_EQ(helper.GetToken(), helper.GetToken());
-}
-
-TEST(IdentifiabilityStudyHelperTest, UpdateBuilderAfterGetToken) {
-  IdentifiabilityStudyHelper helper1;
-  IdentifiabilityStudyHelper helper2;
-  helper1.UpdateBuilder(1246);
-  helper2.UpdateBuilder(1246);
-
-  helper1.GetToken();
-
-  helper1.UpdateBuilder(52);
-  helper2.UpdateBuilder(52);
-  EXPECT_EQ(helper1.GetToken(), helper1.GetToken());
-}
-
-TEST(IdentifiabilityStudyHelperTest, SameHashAsIdentifiableTokenBuilder_Empty) {
-  IdentifiableTokenBuilder builder;
-  IdentifiabilityStudyHelper helper;
-  EXPECT_EQ(helper.GetToken(), builder.GetToken());
-}
-
-TEST(IdentifiabilityStudyHelperTest,
-     SameHashAsIdentifiableTokenBuilder_Aligned) {
-  std::array<uint64_t, 8> tokens = {0, 1, max_uint, 45, 83, 123, 0, 3567};
-  IdentifiabilityStudyHelper helper1;
-  IdentifiabilityStudyHelper helper2;
-  IdentifiableTokenBuilder builder;
-  helper1.UpdateBuilder(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4],
-                        tokens[5], tokens[6], tokens[7]);
-  for (uint64_t item : tokens) {
-    helper2.UpdateBuilder(item);
-    builder.AddToken(item);
-  }
-  EXPECT_EQ(helper1.GetToken(), builder.GetToken());
-  EXPECT_EQ(helper2.GetToken(), builder.GetToken());
-}
-
-TEST(IdentifiabilityStudyHelperTest,
-     SameHashAsIdentifiableTokenBuilder_Unaligned) {
-  std::array<uint64_t, 10> tokens = {0,   1, max_uint, 45,       83,
-                                     123, 0, 3567,     max_uint, 2};
-  IdentifiabilityStudyHelper helper1;
-  IdentifiabilityStudyHelper helper2;
-  IdentifiableTokenBuilder builder;
-  helper1.UpdateBuilder(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4],
-                        tokens[5], tokens[6], tokens[7], tokens[8], tokens[9]);
-  for (uint64_t item : tokens) {
-    helper2.UpdateBuilder(item);
-    builder.AddToken(item);
-  }
-  EXPECT_EQ(helper1.GetToken(), builder.GetToken());
-  EXPECT_EQ(helper2.GetToken(), builder.GetToken());
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.cc
index b3f776c3..22012936 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.cc
@@ -11,7 +11,6 @@
 namespace blink {
 
 void Path2D::Trace(Visitor* visitor) const {
-  visitor->Trace(identifiability_study_helper_);
   visitor->Trace(context_);
   ScriptWrappable::Trace(visitor);
   CanvasPath::Trace(visitor);
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h b/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h
index 9ab04bb..4410b10 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h
@@ -38,7 +38,6 @@
 #include "third_party/blink/renderer/core/geometry/dom_matrix_read_only.h"
 #include "third_party/blink/renderer/core/svg/svg_path_utilities.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/geometry/path.h"
@@ -89,10 +88,6 @@
         !std::isfinite(matrix->m42()))
       return;
     GetModifiablePath().AddPath(path->GetPath(), matrix->GetAffineTransform());
-    if (identifiability_study_helper_.ShouldUpdateBuilder()) [[unlikely]] {
-      identifiability_study_helper_.UpdateBuilder(CanvasOps::kAddPath,
-                                                  path->GetIdentifiableToken());
-    }
   }
 
   void Trace(Visitor*) const override;
@@ -103,19 +98,16 @@
 
   explicit Path2D(ScriptState* script_state)
       : context_(ExecutionContext::From(script_state)) {
-    identifiability_study_helper_.SetExecutionContext(context_.Get());
     GetModifiablePath().SetIsVolatile(false);
   }
   Path2D(ScriptState* script_state, const Path& path)
       : CanvasPath(path), context_(ExecutionContext::From(script_state)) {
-    identifiability_study_helper_.SetExecutionContext(context_.Get());
     GetModifiablePath().SetIsVolatile(false);
   }
   Path2D(ScriptState* script_state, Path2D* path)
       : Path2D(script_state, path->GetPath()) {}
   Path2D(ScriptState* script_state, const String& path_data)
       : context_(ExecutionContext::From(script_state)) {
-    identifiability_study_helper_.SetExecutionContext(context_.Get());
     GetModifiablePath() = PathBuilder(BuildPathFromString(path_data));
     GetModifiablePath().SetIsVolatile(false);
   }
diff --git a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc
index a8b19ff1..4f9221c 100644
--- a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc
+++ b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc
@@ -289,15 +289,12 @@
 ImageBitmapFactories& ImageBitmapFactories::From(ExecutionContext& context) {
   ImageBitmapFactories* supplement = context.GetImageBitmapFactories();
   if (!supplement) {
-    supplement = MakeGarbageCollected<ImageBitmapFactories>(context);
+    supplement = MakeGarbageCollected<ImageBitmapFactories>();
     context.SetImageBitmapFactories(supplement);
   }
   return *supplement;
 }
 
-ImageBitmapFactories::ImageBitmapFactories(ExecutionContext& context)
-    : execution_context_(context) {}
-
 void ImageBitmapFactories::AddLoader(ImageBitmapLoader* loader) {
   pending_loaders_.insert(loader);
 }
@@ -309,7 +306,6 @@
 
 void ImageBitmapFactories::Trace(Visitor* visitor) const {
   visitor->Trace(pending_loaders_);
-  visitor->Trace(execution_context_);
 }
 
 ImageBitmapFactories::ImageBitmapLoader::ImageBitmapLoader(
diff --git a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h
index 4d82de6..18176e2d 100644
--- a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h
+++ b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h
@@ -66,7 +66,7 @@
       public NameClient,
       public GarbageCollectedMixin {
  public:
-  explicit ImageBitmapFactories(ExecutionContext& context);
+  ImageBitmapFactories() = default;
 
   static ScriptPromise<ImageBitmap> CreateImageBitmap(
       ScriptState*,
@@ -144,7 +144,6 @@
   }
 
  private:
-  Member<ExecutionContext> execution_context_;
   static ScriptPromise<ImageBitmap> CreateImageBitmap(
       ScriptState*,
       ImageBitmapSource*,
diff --git a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc
index 711a9e5..1f08d2f 100644
--- a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc
+++ b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc
@@ -105,8 +105,6 @@
                              attrs,
                              canvas->GetTopExecutionContext()->GetTaskRunner(
                                  TaskType::kInternalDefault)) {
-  identifiability_study_helper_.SetExecutionContext(
-      canvas->GetTopExecutionContext());
   is_valid_size_ = Host()->IsValidImageSize();
 
   ExecutionContext* execution_context = canvas->GetTopExecutionContext();
diff --git a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h
index 2405ad36..0c3584b5 100644
--- a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h
+++ b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h
@@ -13,12 +13,10 @@
 #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context_factory.h"
 #include "third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h"
-#include "third_party/blink/renderer/modules/canvas/canvas2d/identifiability_study_helper.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/graphics/canvas_2d_color_params.h"
 #include "third_party/blink/renderer/platform/graphics/canvas_resource_provider.h"
 #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h"
-#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
 
 namespace blink {
 
@@ -120,22 +118,6 @@
   CanvasRenderingContextHost* GetCanvasRenderingContextHost() const override;
   ExecutionContext* GetTopExecutionContext() const override;
 
-  IdentifiableToken IdentifiableTextToken() const override {
-    return identifiability_study_helper_.GetToken();
-  }
-
-  bool IdentifiabilityEncounteredSkippedOps() const override {
-    return identifiability_study_helper_.encountered_skipped_ops();
-  }
-
-  bool IdentifiabilityEncounteredSensitiveOps() const override {
-    return identifiability_study_helper_.encountered_sensitive_ops();
-  }
-
-  bool IdentifiabilityEncounteredPartiallyDigestedImage() const override {
-    return identifiability_study_helper_.encountered_partially_digested_image();
-  }
-
   std::optional<cc::PaintRecord> FlushCanvas(FlushReason) override;
 
  protected:
diff --git a/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.cc b/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.cc
index 44ac08a..81b2637 100644
--- a/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.cc
+++ b/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.cc
@@ -43,7 +43,6 @@
 
 PressureObserverManager::PressureObserverManager(ExecutionContext* context)
     : ExecutionContextLifecycleStateObserver(context),
-      execution_context_(*context),
       pressure_manager_(context) {
   UpdateStateIfNeeded();
   for (const auto& source : PressureObserver::knownSources()) {
@@ -105,7 +104,6 @@
   visitor->Trace(pressure_manager_);
   visitor->Trace(source_to_client_);
   ExecutionContextLifecycleStateObserver::Trace(visitor);
-  visitor->Trace(execution_context_);
 }
 
 void PressureObserverManager::EnsureConnection(
diff --git a/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.h b/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.h
index 2a0a428..7b98cad 100644
--- a/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.h
+++ b/third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.h
@@ -60,8 +60,6 @@
   void DidAddClient(V8PressureSource::Enum,
                     device::mojom::blink::PressureManagerAddClientResult);
 
-  Member<ExecutionContext> execution_context_;
-
   // Connection to the browser side implementation.
   HeapMojoRemote<mojom::blink::WebPressureManager> pressure_manager_;
 
diff --git a/third_party/blink/renderer/modules/content_extraction/inner_html_agent.cc b/third_party/blink/renderer/modules/content_extraction/inner_html_agent.cc
index 52a58b28..9c48aee 100644
--- a/third_party/blink/renderer/modules/content_extraction/inner_html_agent.cc
+++ b/third_party/blink/renderer/modules/content_extraction/inner_html_agent.cc
@@ -31,8 +31,7 @@
 }
 
 InnerHtmlAgent::InnerHtmlAgent(base::PassKey<InnerHtmlAgent>, LocalFrame& frame)
-    : Supplement<Document>(*frame.GetDocument()),
-      receiver_set_(this, frame.DomWindow()) {}
+    : document_(*frame.GetDocument()), receiver_set_(this, frame.DomWindow()) {}
 
 InnerHtmlAgent::~InnerHtmlAgent() = default;
 
@@ -42,16 +41,16 @@
   // a response to the user.
   receiver_set_.Add(
       std::move(receiver),
-      GetSupplementable()->GetTaskRunner(TaskType::kInternalUserInteraction));
+      document_->GetTaskRunner(TaskType::kInternalUserInteraction));
 }
 
 void InnerHtmlAgent::Trace(Visitor* visitor) const {
+  visitor->Trace(document_);
   visitor->Trace(receiver_set_);
-  Supplement<Document>::Trace(visitor);
 }
 
 void InnerHtmlAgent::GetInnerHtml(GetInnerHtmlCallback callback) {
-  LocalFrame* frame = GetSupplementable()->GetFrame();
+  LocalFrame* frame = document_->GetFrame();
   CHECK(frame);
   std::move(callback).Run(InnerHtmlBuilder::Build(*frame));
 }
diff --git a/third_party/blink/renderer/modules/content_extraction/inner_html_agent.h b/third_party/blink/renderer/modules/content_extraction/inner_html_agent.h
index c7a6af64..cb26eb8 100644
--- a/third_party/blink/renderer/modules/content_extraction/inner_html_agent.h
+++ b/third_party/blink/renderer/modules/content_extraction/inner_html_agent.h
@@ -10,7 +10,6 @@
 #include "third_party/blink/public/mojom/content_extraction/inner_html.mojom-blink.h"
 #include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h"
 #include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h"
-#include "third_party/blink/renderer/platform/supplementable.h"
 
 namespace blink {
 
@@ -21,7 +20,7 @@
 // to InnerHtmlBuilder to handle building of the text.
 class InnerHtmlAgent final : public GarbageCollected<InnerHtmlAgent>,
                              public mojom::blink::InnerHtmlAgent,
-                             public Supplement<Document> {
+                             public GarbageCollectedMixin {
  public:
   static const unsigned kSupplementIndex;
   static InnerHtmlAgent* From(Document&);
@@ -42,6 +41,7 @@
  private:
   void Bind(mojo::PendingReceiver<mojom::blink::InnerHtmlAgent> receiver);
 
+  Member<Document> document_;
   HeapMojoReceiverSet<mojom::blink::InnerHtmlAgent, InnerHtmlAgent>
       receiver_set_;
 };
diff --git a/third_party/blink/renderer/modules/content_extraction/testing/internals_content_extraction.cc b/third_party/blink/renderer/modules/content_extraction/testing/internals_content_extraction.cc
index c05a008..dac7007 100644
--- a/third_party/blink/renderer/modules/content_extraction/testing/internals_content_extraction.cc
+++ b/third_party/blink/renderer/modules/content_extraction/testing/internals_content_extraction.cc
@@ -29,7 +29,6 @@
     return nullptr;
   }
 
-  // AiPageContentAgent is a Supplement on Document.
   AIPageContentAgent* agent =
       AIPageContentAgent::GetOrCreateForTesting(document);
   if (!agent) {
diff --git a/third_party/blink/renderer/modules/cookie_store/global_cookie_store.cc b/third_party/blink/renderer/modules/cookie_store/global_cookie_store.cc
index 5e6d9cdb..d1c7dfac 100644
--- a/third_party/blink/renderer/modules/cookie_store/global_cookie_store.cc
+++ b/third_party/blink/renderer/modules/cookie_store/global_cookie_store.cc
@@ -70,8 +70,6 @@
 
 // static
 CookieStore* GlobalCookieStore::cookieStore(ServiceWorkerGlobalScope& worker) {
-  // ServiceWorkerGlobalScope is Supplementable<WorkerGlobalScope>, not
-  // Supplementable<ServiceWorkerGlobalScope>.
   return GlobalCookieStoreImpl<WorkerGlobalScope>::From(worker).GetCookieStore(
       worker);
 }
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h
index a3d58015..3bb310e 100644
--- a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h
+++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h
@@ -36,8 +36,7 @@
     : public GarbageCollected<PaintWorkletProxyClient>,
       public PaintWorkletPainter {
  public:
-  // blink::Supplement hook to retrieve the PaintWorkletProxyClient for a given
-  // WorkerClients.
+  // Hook to etrieve the PaintWorkletProxyClient for a given WorkerClients.
 
   static PaintWorkletProxyClient* From(WorkerClients*);
 
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.cc b/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.cc
index 66a9b4d..7fb1027 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.cc
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.cc
@@ -23,13 +23,10 @@
 }
 
 FileSystemAccessManager::FileSystemAccessManager(ExecutionContext* context)
-    : ExecutionContextClient(context),
-      execution_context_(*context),
-      remote_(context) {}
+    : ExecutionContextClient(context), remote_(context) {}
 
 void FileSystemAccessManager::Trace(Visitor* visitor) const {
   visitor->Trace(remote_);
-  visitor->Trace(execution_context_);
   ExecutionContextClient::Trace(visitor);
 }
 
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.h b/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.h
index 73504917..8872dfc8 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.h
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_access_manager.h
@@ -43,7 +43,6 @@
 
   void EnsureConnection();
 
-  Member<ExecutionContext> execution_context_;
   HeapMojoRemote<mojom::blink::FileSystemAccessManager> remote_;
 };
 
diff --git a/third_party/blink/renderer/modules/media_capabilities/BUILD.gn b/third_party/blink/renderer/modules/media_capabilities/BUILD.gn
index d7fcaa4..830b332 100644
--- a/third_party/blink/renderer/modules/media_capabilities/BUILD.gn
+++ b/third_party/blink/renderer/modules/media_capabilities/BUILD.gn
@@ -10,8 +10,6 @@
   sources = [
     "media_capabilities.cc",
     "media_capabilities.h",
-    "media_capabilities_identifiability_metrics.cc",
-    "media_capabilities_identifiability_metrics.h",
   ]
   deps = [
     "//media",
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc
index 43351115..a022e99 100644
--- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc
+++ b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc
@@ -54,7 +54,6 @@
 #include "third_party/blink/renderer/modules/encryptedmedia/encrypted_media_utils.h"
 #include "third_party/blink/renderer/modules/encryptedmedia/media_key_system_access.h"
 #include "third_party/blink/renderer/modules/encryptedmedia/media_key_system_access_initializer_base.h"
-#include "third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.h"
 #include "third_party/blink/renderer/modules/media_capabilities_names.h"
 #include "third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
@@ -153,8 +152,6 @@
     ScriptState* script_state,
     const MediaDecodingConfiguration* config) {
   MediaCapabilitiesDecodingInfo* info = CreateDecodingInfoWith(value);
-  media_capabilities_identifiability_metrics::ReportDecodingInfoResult(
-      ExecutionContext::From(script_state), config, info);
   return ToResolvedPromise<MediaCapabilitiesDecodingInfo>(script_state, info);
 }
 
@@ -769,12 +766,10 @@
 MediaCapabilities::PendingCallbackState::PendingCallbackState(
     ScriptPromiseResolverBase* resolver,
     MediaKeySystemAccess* access,
-    const base::TimeTicks& request_time,
-    std::optional<IdentifiableToken> input_token)
+    const base::TimeTicks& request_time)
     : resolver(resolver),
       key_system_access(access),
-      request_time(request_time),
-      input_token(input_token) {}
+      request_time(request_time) {}
 
 void MediaCapabilities::PendingCallbackState::Trace(
     blink::Visitor* visitor) const {
@@ -823,7 +818,7 @@
       pending_cb_map_.insert(
           callback_id,
           MakeGarbageCollected<MediaCapabilities::PendingCallbackState>(
-              resolver, nullptr, request_time, std::nullopt));
+              resolver, nullptr, request_time));
 
       std::optional<webrtc::SdpAudioFormat> sdp_audio_format =
           config->hasAudio()
@@ -902,8 +897,6 @@
       // MediaKeySystemAccess.
       MediaCapabilitiesDecodingInfo* info =
           CreateEncryptedDecodingInfoWith(false, nullptr);
-      media_capabilities_identifiability_metrics::ReportDecodingInfoResult(
-          ExecutionContext::From(script_state), config, info);
       return ToResolvedPromise<MediaCapabilitiesDecodingInfo>(script_state,
                                                               info);
     }
@@ -1055,7 +1048,7 @@
       pending_cb_map_.insert(
           callback_id,
           MakeGarbageCollected<MediaCapabilities::PendingCallbackState>(
-              resolver, nullptr, request_time, std::nullopt));
+              resolver, nullptr, request_time));
 
       std::optional<webrtc::SdpAudioFormat> sdp_audio_format =
           config->hasAudio()
@@ -1322,8 +1315,6 @@
     // Audio-only is always smooth and power efficient.
     MediaCapabilitiesDecodingInfo* info = CreateDecodingInfoWith(true);
     info->setKeySystemAccess(access);
-    media_capabilities_identifiability_metrics::ReportDecodingInfoResult(
-        execution_context, decoding_config, info);
     resolver->Resolve(info);
     return;
   }
@@ -1342,8 +1333,6 @@
 
   if (!EnsurePerfHistoryService(execution_context)) {
     MediaCapabilitiesDecodingInfo* info = CreateDecodingInfoWith(true);
-    media_capabilities_identifiability_metrics::ReportDecodingInfoResult(
-        execution_context, decoding_config, info);
     resolver->Resolve(WrapPersistent(info));
     return;
   }
@@ -1352,9 +1341,7 @@
   pending_cb_map_.insert(
       callback_id,
       MakeGarbageCollected<MediaCapabilities::PendingCallbackState>(
-          resolver, access, request_time,
-          media_capabilities_identifiability_metrics::
-              ComputeDecodingInfoInputToken(decoding_config)));
+          resolver, access, request_time));
 
   media::mojom::blink::PredictionFeaturesPtr features =
       media::mojom::blink::PredictionFeatures::New(
@@ -1506,8 +1493,6 @@
                         process_time);
   }
 
-  media_capabilities_identifiability_metrics::ReportDecodingInfoResult(
-      execution_context, pending_cb->input_token, info);
   pending_cb->resolver->DowncastTo<MediaCapabilitiesDecodingInfo>()->Resolve(
       std::move(info));
   pending_cb_map_.erase(callback_id);
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h
index 343cab0..97716d05d 100644
--- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h
+++ b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h
@@ -12,7 +12,6 @@
 #include "media/base/video_color_space.h"
 #include "media/mojo/mojom/video_decode_perf_history.mojom-blink.h"
 #include "media/mojo/mojom/webrtc_video_perf.mojom-blink.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_video_configuration.h"
@@ -69,8 +68,7 @@
    public:
     PendingCallbackState(ScriptPromiseResolverBase* resolver,
                          MediaKeySystemAccess* access,
-                         const base::TimeTicks& request_time,
-                         std::optional<IdentifiableToken> input_token);
+                         const base::TimeTicks& request_time);
     virtual void Trace(blink::Visitor* visitor) const;
 
     Member<ScriptPromiseResolverBase> resolver;
@@ -83,7 +81,6 @@
     std::optional<bool> is_gpu_factories_supported;
     std::optional<bool> is_builtin_video_codec;
     base::TimeTicks request_time;
-    std::optional<IdentifiableToken> input_token;
   };
 
   FRIEND_TEST_ALL_PREFIXES(MediaCapabilitiesTests,
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.cc b/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.cc
deleted file mode 100644
index 10ef0147..0000000
--- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.cc
+++ /dev/null
@@ -1,294 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.h"
-
-#include "base/bit_cast.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_audio_configuration.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_key_system_track_configuration.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_media_capabilities_decoding_info.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_media_capabilities_key_system_configuration.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_media_decoding_configuration.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_media_key_system_access.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_media_key_system_configuration.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_media_key_system_media_capability.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_video_configuration.h"
-#include "third_party/blink/renderer/core/execution_context/execution_context.h"
-#include "third_party/blink/renderer/modules/encryptedmedia/media_key_system_access.h"
-#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
-
-namespace blink {
-namespace media_capabilities_identifiability_metrics {
-namespace {
-
-bool IsDecodingInfoTypeAllowed() {
-  return IdentifiabilityStudySettings::Get()->ShouldSampleType(
-      IdentifiableSurface::Type::kMediaCapabilities_DecodingInfo);
-}
-
-bool ShouldSampleDecodingInfoType() {
-  return IdentifiabilityStudySettings::Get()->ShouldSampleType(
-      IdentifiableSurface::Type::kMediaCapabilities_DecodingInfo);
-}
-
-void RecordDecodingIdentifiabilityMetric(ExecutionContext* context,
-                                         IdentifiableToken input_token,
-                                         IdentifiableToken output_token) {
-  DCHECK(IsDecodingInfoTypeAllowed());
-  IdentifiabilityMetricBuilder(context->UkmSourceID())
-      .Add(IdentifiableSurface::FromTypeAndToken(
-               IdentifiableSurface::Type::kMediaCapabilities_DecodingInfo,
-               input_token),
-           output_token)
-      .Record(context->UkmRecorder());
-}
-
-// The various ComputeToken methods create digests of each of the objects,
-// returning the special empty value when an input is nullptr.
-IdentifiableToken ComputeToken(const VideoConfiguration* configuration) {
-  DCHECK(IsDecodingInfoTypeAllowed());
-  if (!configuration)
-    return IdentifiableToken();
-
-  // `IdentifiableTokenBuilder::AddValue()` requires
-  // `std::has_unique_object_representations_v<>`, which doesn't hold for
-  // floating-point values. Work around by reinterpreting as an integral type of
-  // the same size, without changing the underlying bit pattern.
-  static_assert(sizeof(decltype(configuration->framerate())) ==
-                sizeof(int64_t));
-  IdentifiableTokenBuilder builder;
-  builder
-      .AddToken(IdentifiabilityBenignStringToken(configuration->contentType()))
-      .AddValue(configuration->width())
-      .AddValue(configuration->height())
-      .AddValue(configuration->bitrate())
-      .AddValue(base::bit_cast<int64_t>(configuration->framerate()));
-
-  // While the above are always present, we need to check the other properties'
-  // presence explicitly.
-  builder.AddValue(configuration->hasHdrMetadataType())
-      .AddValue(configuration->hasColorGamut())
-      .AddValue(configuration->hasTransferFunction())
-      .AddValue(configuration->hasScalabilityMode());
-  if (configuration->hasHdrMetadataType()) {
-    builder.AddToken(IdentifiabilityBenignStringToken(
-        configuration->hdrMetadataType().AsString()));
-  }
-  if (configuration->hasColorGamut()) {
-    builder.AddToken(IdentifiabilityBenignStringToken(
-        configuration->colorGamut().AsString()));
-  }
-  if (configuration->hasTransferFunction()) {
-    builder.AddToken(IdentifiabilityBenignStringToken(
-        configuration->transferFunction().AsString()));
-  }
-  if (configuration->hasScalabilityMode()) {
-    builder.AddToken(
-        IdentifiabilityBenignStringToken(configuration->scalabilityMode()));
-  }
-  return builder.GetToken();
-}
-
-IdentifiableToken ComputeToken(const AudioConfiguration* configuration) {
-  DCHECK(IsDecodingInfoTypeAllowed());
-  if (!configuration)
-    return IdentifiableToken();
-
-  IdentifiableTokenBuilder builder;
-  builder.AddToken(
-      IdentifiabilityBenignStringToken(configuration->contentType()));
-
-  // While the strings above will be null if not present, we need to check
-  // the presence of numerical types explicitly.
-  builder.AddValue(configuration->hasChannels())
-      .AddValue(configuration->hasBitrate())
-      .AddValue(configuration->hasSamplerate());
-  if (configuration->hasChannels()) {
-    builder.AddToken(
-        IdentifiabilityBenignStringToken(configuration->channels()));
-  }
-  if (configuration->hasBitrate())
-    builder.AddValue(configuration->bitrate());
-  if (configuration->hasSamplerate())
-    builder.AddValue(configuration->samplerate());
-  return builder.GetToken();
-}
-
-IdentifiableToken ComputeToken(
-    const KeySystemTrackConfiguration* configuration) {
-  DCHECK(IsDecodingInfoTypeAllowed());
-  if (!configuration)
-    return IdentifiableToken();
-
-  IdentifiableTokenBuilder builder;
-  builder.AddToken(
-      IdentifiabilityBenignStringToken(configuration->robustness()));
-  return builder.GetToken();
-}
-
-IdentifiableToken ComputeToken(
-    const MediaKeySystemMediaCapability* capability) {
-  DCHECK(IsDecodingInfoTypeAllowed());
-  if (!capability)
-    return IdentifiableToken();
-
-  IdentifiableTokenBuilder builder;
-  builder.AddToken(IdentifiabilityBenignStringToken(capability->contentType()))
-      .AddToken(IdentifiabilityBenignStringToken(capability->robustness()))
-      .AddToken(
-          IdentifiabilityBenignStringToken(capability->encryptionScheme()));
-  return builder.GetToken();
-}
-
-IdentifiableToken ComputeToken(
-    const MediaKeySystemConfiguration* configuration) {
-  DCHECK(IsDecodingInfoTypeAllowed());
-  if (!configuration)
-    return IdentifiableToken();
-
-  IdentifiableTokenBuilder builder;
-  builder.AddToken(IdentifiabilityBenignStringToken(configuration->label()))
-      .AddValue(configuration->hasInitDataTypes())
-      .AddValue(configuration->hasAudioCapabilities())
-      .AddValue(configuration->hasVideoCapabilities())
-      .AddToken(IdentifiabilityBenignStringToken(
-          configuration->distinctiveIdentifier().AsString()))
-      .AddToken(IdentifiabilityBenignStringToken(
-          configuration->persistentState().AsString()))
-      .AddValue(configuration->hasSessionTypes());
-  if (configuration->hasInitDataTypes()) {
-    builder.AddToken(
-        IdentifiabilityBenignStringVectorToken(configuration->initDataTypes()));
-  }
-  if (configuration->hasAudioCapabilities()) {
-    const HeapVector<Member<MediaKeySystemMediaCapability>>&
-        audio_capabilities = configuration->audioCapabilities();
-    builder.AddValue(audio_capabilities.size());
-    for (const auto& elem : audio_capabilities)
-      builder.AddToken(ComputeToken(elem.Get()));
-  }
-  if (configuration->hasVideoCapabilities()) {
-    const HeapVector<Member<MediaKeySystemMediaCapability>>&
-        video_capabilities = configuration->videoCapabilities();
-    builder.AddValue(video_capabilities.size());
-    for (const auto& elem : video_capabilities)
-      builder.AddToken(ComputeToken(elem.Get()));
-  }
-  if (configuration->hasSessionTypes()) {
-    builder.AddToken(
-        IdentifiabilityBenignStringVectorToken(configuration->sessionTypes()));
-  }
-  return builder.GetToken();
-}
-
-IdentifiableToken ComputeToken(const MediaKeySystemAccess* access) {
-  DCHECK(IsDecodingInfoTypeAllowed());
-  if (!access)
-    return IdentifiableToken();
-
-  IdentifiableTokenBuilder builder;
-  builder.AddToken(IdentifiabilityBenignStringToken(access->keySystem()))
-      .AddToken(ComputeToken(access->getConfiguration()));
-  return builder.GetToken();
-}
-
-IdentifiableToken ComputeToken(
-    const MediaCapabilitiesKeySystemConfiguration* configuration) {
-  DCHECK(IsDecodingInfoTypeAllowed());
-  if (!configuration)
-    return IdentifiableToken();
-
-  IdentifiableTokenBuilder builder;
-  builder.AddToken(IdentifiabilityBenignStringToken(configuration->keySystem()))
-      .AddToken(IdentifiabilityBenignStringToken(configuration->initDataType()))
-      .AddToken(IdentifiabilityBenignStringToken(
-          configuration->distinctiveIdentifier().AsString()))
-      .AddToken(IdentifiabilityBenignStringToken(
-          configuration->persistentState().AsString()))
-      .AddValue(configuration->hasSessionTypes())
-      .AddValue(configuration->hasAudio())
-      .AddValue(configuration->hasVideo());
-  if (configuration->hasSessionTypes()) {
-    builder.AddToken(
-        IdentifiabilityBenignStringVectorToken(configuration->sessionTypes()));
-  }
-  if (configuration->hasAudio())
-    builder.AddToken(ComputeToken(configuration->audio()));
-  if (configuration->hasVideo())
-    builder.AddToken(ComputeToken(configuration->video()));
-  return builder.GetToken();
-}
-
-IdentifiableToken ComputeToken(
-    const MediaDecodingConfiguration* configuration) {
-  DCHECK(IsDecodingInfoTypeAllowed());
-  if (!configuration)
-    return IdentifiableToken();
-
-  IdentifiableTokenBuilder builder;
-  builder
-      .AddToken(
-          IdentifiabilityBenignStringToken(configuration->type().AsString()))
-      .AddValue(configuration->hasKeySystemConfiguration())
-      .AddValue(configuration->hasAudio())
-      .AddValue(configuration->hasVideo());
-  if (configuration->hasKeySystemConfiguration())
-    builder.AddToken(ComputeToken(configuration->keySystemConfiguration()));
-  if (configuration->hasAudio())
-    builder.AddToken(ComputeToken(configuration->audio()));
-  if (configuration->hasVideo())
-    builder.AddToken(ComputeToken(configuration->video()));
-  return builder.GetToken();
-}
-
-IdentifiableToken ComputeToken(const MediaCapabilitiesDecodingInfo* info) {
-  DCHECK(IsDecodingInfoTypeAllowed());
-  if (!info)
-    return IdentifiableToken();
-
-  IdentifiableTokenBuilder builder;
-  builder.AddValue(info->supported())
-      .AddValue(info->smooth())
-      .AddValue(info->powerEfficient())
-      .AddToken(ComputeToken(info->keySystemAccess()));
-  return builder.GetToken();
-}
-
-}  // namespace
-
-void ReportDecodingInfoResult(ExecutionContext* context,
-                              const MediaDecodingConfiguration* input,
-                              const MediaCapabilitiesDecodingInfo* output) {
-  if (!IsDecodingInfoTypeAllowed() || !ShouldSampleDecodingInfoType())
-    return;
-
-  RecordDecodingIdentifiabilityMetric(context, ComputeToken(input),
-                                      ComputeToken(output));
-}
-
-void ReportDecodingInfoResult(ExecutionContext* context,
-                              std::optional<IdentifiableToken> input_token,
-                              const MediaCapabilitiesDecodingInfo* output) {
-  DCHECK_EQ(IsDecodingInfoTypeAllowed(), input_token.has_value());
-  if (!input_token.has_value() || !ShouldSampleDecodingInfoType())
-    return;
-
-  RecordDecodingIdentifiabilityMetric(context, input_token.value(),
-                                      IdentifiableToken());
-}
-
-std::optional<IdentifiableToken> ComputeDecodingInfoInputToken(
-    const MediaDecodingConfiguration* input) {
-  if (!IsDecodingInfoTypeAllowed() || !ShouldSampleDecodingInfoType())
-    return std::nullopt;
-
-  return ComputeToken(input);
-}
-
-}  // namespace media_capabilities_identifiability_metrics
-}  // namespace blink
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.h b/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.h
deleted file mode 100644
index 3c914553..0000000
--- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities_identifiability_metrics.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_MEDIA_CAPABILITIES_IDENTIFIABILITY_METRICS_H_
-#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_MEDIA_CAPABILITIES_IDENTIFIABILITY_METRICS_H_
-
-#include <optional>
-
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
-
-namespace blink {
-
-class ExecutionContext;
-class MediaCapabilitiesDecodingInfo;
-class MediaDecodingConfiguration;
-
-// Defines methods used to emit UKM events for the identifiability study to
-// determine whether MediaCapabilities::decodingInfo() calls can be used for
-// fingerprinting users and, if so, how much entropy is exposed by the API. Only
-// emits these events when the study is active.
-namespace media_capabilities_identifiability_metrics {
-
-// Reports that a call to decodingInfo() occurred that had the given |input|,
-// resulted in |output| and was performed on the |context|.
-void ReportDecodingInfoResult(ExecutionContext*,
-                              const MediaDecodingConfiguration*,
-                              const MediaCapabilitiesDecodingInfo*);
-
-// Reports that a call to decodingInfo() occurred that had an input with a
-// digest of |input_token.value()|, resulted in |output| and was performed on
-// the |context|. However, |input_token| should be std::nullopt if the study
-// is not active. These calls should be used when the input object may have
-// been destroyed by the time the output is determined. See
-// ComputeDecodingInfoInputToken below.
-void ReportDecodingInfoResult(ExecutionContext*,
-                              std::optional<IdentifiableToken>,
-                              const MediaCapabilitiesDecodingInfo*);
-
-// Returns a digest of the |input| for use in ReportDecodingInfoResult()
-// above. Returns std::nullopt if the identifiability study is not active.
-std::optional<IdentifiableToken> ComputeDecodingInfoInputToken(
-    const MediaDecodingConfiguration*);
-
-}  // namespace media_capabilities_identifiability_metrics
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_MEDIA_CAPABILITIES_IDENTIFIABILITY_METRICS_H_
diff --git a/third_party/blink/renderer/modules/mediarecorder/media_recorder.cc b/third_party/blink/renderer/modules/mediarecorder/media_recorder.cc
index 93c73a9..49e7e03 100644
--- a/third_party/blink/renderer/modules/mediarecorder/media_recorder.cc
+++ b/third_party/blink/renderer/modules/mediarecorder/media_recorder.cc
@@ -8,9 +8,6 @@
 #include <limits>
 
 #include "base/time/time.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/bindings/core/v8/dictionary.h"
@@ -33,7 +30,6 @@
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_descriptor.h"
 #include "third_party/blink/renderer/platform/network/mime/content_type.h"
-#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 #include "third_party/blink/renderer/platform/wtf/text/strcat.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
@@ -406,16 +402,6 @@
   bool result = handler->CanSupportMimeType(
       content_type.GetType(), content_type.Parameter("codecs"),
       MediaRecorderHandler::CanSupportMimeTypeCaller::kIsTypeSupported);
-  if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-          blink::IdentifiableSurface::Type::kMediaRecorder_IsTypeSupported)) {
-    blink::IdentifiabilityMetricBuilder(context->UkmSourceID())
-        .Add(blink::IdentifiableSurface::FromTypeAndToken(
-                 blink::IdentifiableSurface::Type::
-                     kMediaRecorder_IsTypeSupported,
-                 IdentifiabilityBenignStringToken(type)),
-             result)
-        .Record(context->UkmRecorder());
-  }
 
   return result;
 }
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.cc b/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.cc
index df01868..ce8c33d 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.cc
@@ -127,7 +127,6 @@
 RtcTransportDependencies::RtcTransportDependencies(ExecutionContext& context,
                                                    PassKey)
     : ExecutionContextLifecycleObserver(&context),
-      execution_context_(context),
       p2p_socket_dispatcher_(P2PSocketDispatcher::From(context)),
       webrtc_environment_(webrtc::EnvironmentFactory().Create()) {
   // Start initialization on the network thread.
@@ -230,7 +229,6 @@
 }
 
 void RtcTransportDependencies::Trace(Visitor* visitor) const {
-  visitor->Trace(execution_context_);
   ExecutionContextLifecycleObserver::Trace(visitor);
   visitor->Trace(p2p_socket_dispatcher_);
 }
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.h b/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.h
index dd6042b..f969013 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_transport/rtc_transport_dependencies.h
@@ -53,7 +53,6 @@
   Vector<base::OnceClosure> initialized_callback_list_;
   void RunOnceInitialized(base::OnceClosure initialized_callback);
 
-  Member<ExecutionContext> execution_context_;
   Member<P2PSocketDispatcher> p2p_socket_dispatcher_;
   std::unique_ptr<IpcNetworkManager> network_manager_;
   std::unique_ptr<IpcPacketSocketFactory> socket_factory_;
diff --git a/third_party/blink/renderer/modules/presentation/presentation_controller.h b/third_party/blink/renderer/modules/presentation/presentation_controller.h
index 026f2285..fff263c4 100644
--- a/third_party/blink/renderer/modules/presentation/presentation_controller.h
+++ b/third_party/blink/renderer/modules/presentation/presentation_controller.h
@@ -45,7 +45,7 @@
   static PresentationController* From(LocalDOMWindow&);
   static PresentationController* FromContext(ExecutionContext*);
 
-  // Implementation of Supplement.
+  // Implementation of GarbageCollectedMixin.
   void Trace(Visitor*) const override;
 
   // Called by the Presentation object to advertize itself to the controller.
diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis.cc b/third_party/blink/renderer/modules/speech/speech_synthesis.cc
index a2b1584..764b01b 100644
--- a/third_party/blink/renderer/modules/speech/speech_synthesis.cc
+++ b/third_party/blink/renderer/modules/speech/speech_synthesis.cc
@@ -28,10 +28,6 @@
 #include <tuple>
 
 #include "build/build_config.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -48,7 +44,6 @@
 #include "third_party/blink/renderer/modules/speech/speech_synthesis_event.h"
 #include "third_party/blink/renderer/modules/speech/speech_synthesis_voice.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
-#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
 
 namespace blink {
 
@@ -100,32 +95,9 @@
 const HeapVector<Member<SpeechSynthesisVoice>>& SpeechSynthesis::getVoices() {
   // Kick off initialization here to ensure voice list gets populated.
   std::ignore = TryEnsureMojomSynthesis();
-  RecordVoicesForIdentifiability();
   return voice_list_;
 }
 
-void SpeechSynthesis::RecordVoicesForIdentifiability() const {
-  constexpr IdentifiableSurface surface = IdentifiableSurface::FromTypeAndToken(
-      IdentifiableSurface::Type::kWebFeature,
-      WebFeature::kSpeechSynthesis_GetVoices_Method);
-  if (!IdentifiabilityStudySettings::Get()->ShouldSampleSurface(surface))
-    return;
-  if (!local_dom_window_->GetFrame()) {
-    return;
-  }
-
-  IdentifiableTokenBuilder builder;
-  for (const auto& voice : voice_list_) {
-    builder.AddToken(IdentifiabilityBenignStringToken(voice->voiceURI()));
-    builder.AddToken(IdentifiabilityBenignStringToken(voice->lang()));
-    builder.AddToken(IdentifiabilityBenignStringToken(voice->name()));
-    builder.AddToken(voice->localService());
-  }
-  IdentifiabilityMetricBuilder(local_dom_window_->UkmSourceID())
-      .Add(surface, builder.GetToken())
-      .Record(local_dom_window_->UkmRecorder());
-}
-
 bool SpeechSynthesis::Speaking() const {
   // If we have a current speech utterance, then that means we're assumed to be
   // in a speaking state. This state is independent of whether the utterance
diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis.h b/third_party/blink/renderer/modules/speech/speech_synthesis.h
index f3aa894d..736a316 100644
--- a/third_party/blink/renderer/modules/speech/speech_synthesis.h
+++ b/third_party/blink/renderer/modules/speech/speech_synthesis.h
@@ -131,8 +131,6 @@
 
   bool IsAllowedToStartByAutoplay() const;
 
-  void RecordVoicesForIdentifiability() const;
-
   void SetMojomSynthesisForTesting(
       mojo::PendingRemote<mojom::blink::SpeechSynthesis>);
   mojom::blink::SpeechSynthesis* TryEnsureMojomSynthesis();
diff --git a/third_party/blink/renderer/modules/webcodecs/background_readback.cc b/third_party/blink/renderer/modules/webcodecs/background_readback.cc
index 3ca7b90..050050da 100644
--- a/third_party/blink/renderer/modules/webcodecs/background_readback.cc
+++ b/third_party/blink/renderer/modules/webcodecs/background_readback.cc
@@ -90,10 +90,8 @@
   THREAD_CHECKER(thread_checker_);
 };
 
-BackgroundReadback::BackgroundReadback(base::PassKey<BackgroundReadback> key,
-                                       ExecutionContext& context)
-    : execution_context_(context),
-      sync_readback_impl_(base::MakeRefCounted<SyncReadbackThread>()),
+BackgroundReadback::BackgroundReadback(base::PassKey<BackgroundReadback> key)
+    : sync_readback_impl_(base::MakeRefCounted<SyncReadbackThread>()),
       worker_task_runner_(base::ThreadPool::CreateSingleThreadTaskRunner(
           {base::WithBaseSyncPrimitives()},
           base::SingleThreadTaskRunnerThreadMode::DEDICATED)) {}
@@ -107,7 +105,7 @@
   BackgroundReadback* supplement = context.GetBackgroundReadback();
   if (!supplement) {
     supplement = MakeGarbageCollected<BackgroundReadback>(
-        base::PassKey<BackgroundReadback>(), context);
+        base::PassKey<BackgroundReadback>());
     context.SetBackgroundReadback(supplement);
   }
   return supplement;
diff --git a/third_party/blink/renderer/modules/webcodecs/background_readback.h b/third_party/blink/renderer/modules/webcodecs/background_readback.h
index 2cd7ea73..9ea59558 100644
--- a/third_party/blink/renderer/modules/webcodecs/background_readback.h
+++ b/third_party/blink/renderer/modules/webcodecs/background_readback.h
@@ -33,8 +33,7 @@
       base::OnceCallback<void(scoped_refptr<media::VideoFrame>)>;
   using ReadbackDoneCallback = base::OnceCallback<void(bool)>;
 
-  explicit BackgroundReadback(base::PassKey<BackgroundReadback> key,
-                              ExecutionContext& context);
+  explicit BackgroundReadback(base::PassKey<BackgroundReadback> key);
   virtual ~BackgroundReadback();
 
   static BackgroundReadback* From(ExecutionContext& context);
@@ -50,9 +49,7 @@
       base::span<uint8_t> dest_buffer,
       ReadbackDoneCallback done_cb);
 
-  void Trace(Visitor* visitor) const override {
-    visitor->Trace(execution_context_);
-  }
+  void Trace(Visitor* visitor) const override {}
 
  private:
   void ReadbackOnThread(scoped_refptr<media::VideoFrame> txt_frame,
@@ -89,8 +86,6 @@
       ReadbackDoneCallback done_cb,
       bool success);
 
-  Member<ExecutionContext> execution_context_;
-
   // Lives and dies on the worker thread.
   scoped_refptr<SyncReadbackThread> sync_readback_impl_;
   scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner_;
diff --git a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc
index 92b0202..a16140f 100644
--- a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc
+++ b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc
@@ -11,9 +11,6 @@
 #include "base/numerics/checked_math.h"
 #include "base/numerics/safe_conversions.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
-#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
 #include "third_party/blink/public/platform/web_graphics_context_3d_provider.h"
 #include "third_party/blink/renderer/bindings/modules/v8/webgl_any.h"
 #include "third_party/blink/renderer/core/dom/document.h"
@@ -656,7 +653,6 @@
       auto values = base::HeapArray<GLint>::WithSize(length);
       ContextGL()->GetInternalformativ(target, internalformat, GL_SAMPLES,
                                        length, values.data());
-      RecordInternalFormatParameter(internalformat, values.data(), length);
       return WebGLAny(script_state, DOMInt32Array::Create(values));
     }
     default:
@@ -666,30 +662,6 @@
   }
 }
 
-// TODO(crbug.com/351564777): should be UNSAFE_BUFFER_USAGE.
-void WebGL2RenderingContextBase::RecordInternalFormatParameter(
-    GLenum internalformat,
-    GLint* values,
-    GLint length) {
-  if (!IdentifiabilityStudySettings::Get()->ShouldSampleType(
-          IdentifiableSurface::Type::kWebGLInternalFormatParameter))
-    return;
-  // SAFETY: required from caller.
-  const base::span<GLint> values_span =
-      UNSAFE_BUFFERS(base::span(values, base::checked_cast<size_t>(length)));
-  const auto& ukm_params = GetUkmParameters();
-  IdentifiableTokenBuilder builder;
-  for (const auto& value : values_span) {
-    builder.AddValue(value);
-  }
-  IdentifiabilityMetricBuilder(ukm_params.source_id)
-      .Add(IdentifiableSurface::FromTypeAndToken(
-               IdentifiableSurface::Type::kWebGLInternalFormatParameter,
-               internalformat),
-           builder.GetToken())
-      .Record(ukm_params.ukm_recorder);
-}
-
 bool WebGL2RenderingContextBase::CheckAndTranslateAttachments(
     const char* function_name,
     GLenum target,
diff --git a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.h
index 88a9ccfd..b50684b6 100644
--- a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.h
+++ b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.h
@@ -1088,11 +1088,6 @@
   GLint pack_skip_rows_;
   GLint unpack_image_height_;
   GLint unpack_skip_images_;
-
- private:
-  void RecordInternalFormatParameter(GLenum internalformat,
-                                     GLint* values,
-                                     GLint length);
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
index bd9a720f..a885d13bf 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -52,8 +52,6 @@
 #include "media/base/video_frame.h"
 #include "media/renderers/paint_canvas_video_renderer.h"
 #include "third_party/blink/public/common/features.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/gpu/gpu.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -145,7 +143,6 @@
 #include "third_party/blink/renderer/platform/heap/disallow_new_wrapper.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
-#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
@@ -1009,17 +1006,6 @@
     }
 
     make_xr_compatible_resolver_ = nullptr;
-
-    if (IdentifiabilityStudySettings::Get()->ShouldSampleSurface(
-            IdentifiableSurface::FromTypeAndToken(
-                IdentifiableSurface::Type::kWebFeature,
-                WebFeature::kWebGLRenderingContextMakeXRCompatible))) {
-      const auto& ukm_params = GetUkmParameters();
-      IdentifiabilityMetricBuilder(ukm_params.source_id)
-          .AddWebFeature(WebFeature::kWebGLRenderingContextMakeXRCompatible,
-                         exception_code == DOMExceptionCode::kNoError)
-          .Record(ukm_params.ukm_recorder);
-    }
   }
 }
 
@@ -3768,93 +3754,6 @@
   return ScriptValue::CreateNull(script_state->GetIsolate());
 }
 
-namespace {
-
-// WebGL parameters which can be used to identify users.
-// These parameters should each be uniquely defined,
-// see third_party/khronos/GLES2/gl2.h for their definitions.
-static const GLenum kIdentifiableGLParams[] = {
-    // getParameter()
-    GL_ALIASED_LINE_WIDTH_RANGE,          // GetWebGLFloatArrayParameter
-    GL_ALIASED_POINT_SIZE_RANGE,          // GetWebGLFloatArrayParameter
-    GL_ALPHA_BITS,                        // GetIntParameter
-    GL_BLUE_BITS,                         // GetIntParameter
-    GL_DEPTH_BITS,                        // GetIntParameter
-    GL_GREEN_BITS,                        // GetIntParameter
-    GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,  // GetIntParameter
-    GL_MAX_CUBE_MAP_TEXTURE_SIZE,         // GetIntParameter
-    GL_MAX_FRAGMENT_UNIFORM_VECTORS,      // GetIntParameter
-    GL_MAX_RENDERBUFFER_SIZE,             // GetIntParameter
-    GL_MAX_TEXTURE_IMAGE_UNITS,           // GetIntParameter
-    GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT,    // GetFloatParameter
-    GL_MAX_TEXTURE_SIZE,                  // GetIntParameter
-    GL_MAX_VARYING_VECTORS,               // GetIntParameter
-    GL_MAX_VERTEX_ATTRIBS,                // GetIntParameter
-    GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS,    // GetIntParameter
-    GL_MAX_VERTEX_UNIFORM_VECTORS,        // GetIntParameter
-    GL_MAX_VIEWPORT_DIMS,                 // GetWebGLIntArrayParameter
-    GL_RED_BITS,                          // GetIntParameter
-    GL_SHADING_LANGUAGE_VERSION,
-    GL_STENCIL_BITS,  // GetIntParameter
-    GL_VERSION,
-    WebGLDebugRendererInfo::kUnmaskedRendererWebgl,
-    WebGLDebugRendererInfo::kUnmaskedVendorWebgl,
-
-    // getRenderBufferParameter()
-    GL_RENDERBUFFER_GREEN_SIZE,
-    GL_RENDERBUFFER_BLUE_SIZE,
-    GL_RENDERBUFFER_RED_SIZE,
-    GL_RENDERBUFFER_ALPHA_SIZE,
-    GL_RENDERBUFFER_DEPTH_SIZE,
-    GL_RENDERBUFFER_STENCIL_SIZE,
-    GL_RENDERBUFFER_SAMPLES,
-};
-
-bool ShouldMeasureGLParam(GLenum pname) {
-  return IdentifiabilityStudySettings::Get()->ShouldSampleType(
-             blink::IdentifiableSurface::Type::kWebGLParameter) &&
-         base::Contains(kIdentifiableGLParams, pname);
-}
-
-}  // namespace
-
-void WebGLRenderingContextBase::RecordIdentifiableGLParameterDigest(
-    GLenum pname,
-    IdentifiableToken value) {
-  DCHECK(IdentifiabilityStudySettings::Get()->ShouldSampleType(
-      blink::IdentifiableSurface::Type::kWebGLParameter));
-  const auto ukm_params = GetUkmParameters();
-  blink::IdentifiabilityMetricBuilder(ukm_params.source_id)
-      .Add(blink::IdentifiableSurface::FromTypeAndToken(
-               blink::IdentifiableSurface::Type::kWebGLParameter, pname),
-           value)
-      .Record(ukm_params.ukm_recorder);
-}
-
-void WebGLRenderingContextBase::RecordShaderPrecisionFormatForStudy(
-    GLenum shader_type,
-    GLenum precision_type,
-    WebGLShaderPrecisionFormat* format) {
-  DCHECK(IdentifiabilityStudySettings::Get()->ShouldSampleType(
-      blink::IdentifiableSurface::Type::kWebGLShaderPrecisionFormat));
-
-  const auto& ukm_params = GetUkmParameters();
-  IdentifiableTokenBuilder builder;
-  auto surface_token =
-      builder.AddValue(shader_type).AddValue(precision_type).GetToken();
-  auto sample_token = builder.AddValue(format->rangeMin())
-                          .AddValue(format->rangeMax())
-                          .AddValue(format->precision())
-                          .GetToken();
-
-  blink::IdentifiabilityMetricBuilder(ukm_params.source_id)
-      .Add(blink::IdentifiableSurface::FromTypeAndToken(
-               blink::IdentifiableSurface::Type::kWebGLShaderPrecisionFormat,
-               surface_token),
-           sample_token)
-      .Record(ukm_params.ukm_recorder);
-}
-
 void WebGLRenderingContextBase::RecordANGLEImplementation() {
   DCHECK(drawing_buffer_.get());
   const Platform::WebGLContextInfo& context_info =
@@ -4005,12 +3904,6 @@
     case GL_SCISSOR_TEST:
       return GetBooleanParameter(script_state, pname);
     case GL_SHADING_LANGUAGE_VERSION:
-      if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-              blink::IdentifiableSurface::Type::kWebGLParameter)) {
-        RecordIdentifiableGLParameterDigest(
-            pname, IdentifiabilityBenignStringToken(String(
-                       ContextGL()->GetString(GL_SHADING_LANGUAGE_VERSION))));
-      }
       return WebGLAny(
           script_state,
           StrCat({"WebGL GLSL ES 1.0 (",
@@ -4073,12 +3966,6 @@
     case GL_VENDOR:
       return WebGLAny(script_state, String("WebKit"));
     case GL_VERSION:
-      if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-              blink::IdentifiableSurface::Type::kWebGLParameter)) {
-        RecordIdentifiableGLParameterDigest(
-            pname, IdentifiabilityBenignStringToken(
-                       String(ContextGL()->GetString(GL_VERSION))));
-      }
       return WebGLAny(
           script_state,
           StrCat({"WebGL 1.0 (", String(ContextGL()->GetString(GL_VERSION)),
@@ -4095,12 +3982,6 @@
       return ScriptValue::CreateNull(script_state->GetIsolate());
     case WebGLDebugRendererInfo::kUnmaskedRendererWebgl:
       if (ExtensionEnabled(kWebGLDebugRendererInfoName)) {
-        if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-                blink::IdentifiableSurface::Type::kWebGLParameter)) {
-          RecordIdentifiableGLParameterDigest(
-              pname, IdentifiabilityBenignStringToken(
-                         String(ContextGL()->GetString(GL_RENDERER))));
-        }
         return WebGLAny(script_state,
                         String(ContextGL()->GetString(GL_RENDERER)));
       }
@@ -4110,12 +3991,6 @@
       return ScriptValue::CreateNull(script_state->GetIsolate());
     case WebGLDebugRendererInfo::kUnmaskedVendorWebgl:
       if (ExtensionEnabled(kWebGLDebugRendererInfoName)) {
-        if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-                blink::IdentifiableSurface::Type::kWebGLParameter)) {
-          RecordIdentifiableGLParameterDigest(
-              pname, IdentifiabilityBenignStringToken(
-                         String(ContextGL()->GetString(GL_VENDOR))));
-        }
         return WebGLAny(script_state,
                         String(ContextGL()->GetString(GL_VENDOR)));
       }
@@ -4338,10 +4213,6 @@
     case GL_RENDERBUFFER_DEPTH_SIZE:
     case GL_RENDERBUFFER_STENCIL_SIZE:
       ContextGL()->GetRenderbufferParameteriv(target, pname, &value);
-      if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-              blink::IdentifiableSurface::Type::kWebGLParameter)) {
-        RecordIdentifiableGLParameterDigest(pname, value);
-      }
       return WebGLAny(script_state, value);
     case GL_RENDERBUFFER_INTERNAL_FORMAT:
       return WebGLAny(script_state, renderbuffer_binding_->InternalFormat());
@@ -4421,13 +4292,8 @@
   GLint precision = 0;
   ContextGL()->GetShaderPrecisionFormat(shader_type, precision_type, range,
                                         &precision);
-  auto* result = MakeGarbageCollected<WebGLShaderPrecisionFormat>(
-      range[0], range[1], precision);
-  if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-          blink::IdentifiableSurface::Type::kWebGLShaderPrecisionFormat)) {
-    RecordShaderPrecisionFormatForStudy(shader_type, precision_type, result);
-  }
-  return result;
+  return MakeGarbageCollected<WebGLShaderPrecisionFormat>(range[0], range[1],
+                                                          precision);
 }
 
 String WebGLRenderingContextBase::getShaderSource(WebGLShader* shader) {
@@ -5268,15 +5134,6 @@
       return;
     }
     ContextGL()->ReadPixels(x, y, width, height, format, type, data);
-
-    if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-            IdentifiableSurface::Type::kWebFeature)) {
-      const auto& ukm_params = GetUkmParameters();
-      IdentifiabilityMetricBuilder(ukm_params.source_id)
-          .AddWebFeature(WebFeature::kWebGLRenderingContextReadPixels,
-                         IdentifiableToken())
-          .Record(ukm_params.ukm_recorder);
-    }
   }
 }
 
@@ -7700,11 +7557,8 @@
     ScriptState* script_state,
     GLenum pname) {
   GLfloat value = 0;
-  if (!isContextLost())
+  if (!isContextLost()) {
     ContextGL()->GetFloatv(pname, &value);
-  if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-          blink::IdentifiableSurface::Type::kWebGLParameter)) {
-    RecordIdentifiableGLParameterDigest(pname, value);
   }
   return WebGLAny(script_state, value);
 }
@@ -7728,10 +7582,6 @@
         break;
     }
   }
-  if (IdentifiabilityStudySettings::Get()->ShouldSampleType(
-          blink::IdentifiableSurface::Type::kWebGLParameter)) {
-    RecordIdentifiableGLParameterDigest(pname, value);
-  }
   return WebGLAny(script_state, value);
 }
 
@@ -7773,18 +7623,6 @@
     default:
       NOTIMPLEMENTED();
   }
-  if (ShouldMeasureGLParam(pname)) {
-    // `IdentifiableTokenBuilder::AddValue()` requires
-    // `std::has_unique_object_representations_v<>`, which doesn't hold for
-    // floating-point values. Work around by reinterpreting as an integral type
-    // of the same size, without changing the underlying bit pattern.
-    static_assert(sizeof(decltype(value)::value_type) == sizeof(int32_t));
-    blink::IdentifiableTokenBuilder builder;
-    for (unsigned i = 0; i < length; i++) {
-      builder.AddValue(base::bit_cast<int32_t>(value[i]));
-    }
-    RecordIdentifiableGLParameterDigest(pname, builder.GetToken());
-  }
   return WebGLAny(script_state,
                   DOMFloat32Array::Create(base::span(value).first(length)));
 }
@@ -7807,13 +7645,6 @@
     default:
       NOTIMPLEMENTED();
   }
-  if (ShouldMeasureGLParam(pname)) {
-    blink::IdentifiableTokenBuilder builder;
-    for (unsigned i = 0; i < length; i++) {
-      builder.AddValue(value[i]);
-    }
-    RecordIdentifiableGLParameterDigest(pname, builder.GetToken());
-  }
   return WebGLAny(script_state,
                   DOMInt32Array::Create(base::span(value).first(length)));
 }
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
index 6df0cd8..4750592 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
@@ -35,6 +35,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/checked_math.h"
 #include "device/vr/public/mojom/vr_service.mojom-blink-forward.h"
+#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_graphics_context_3d_provider.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
@@ -42,7 +43,6 @@
 #include "third_party/blink/renderer/bindings/modules/v8/v8_webgl_context_attributes.h"
 #include "third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h"
 #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h"
-#include "third_party/blink/renderer/core/html/canvas/ukm_parameters.h"
 #include "third_party/blink/renderer/core/layout/content_change_type.h"
 #include "third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h"
 #include "third_party/blink/renderer/core/typed_arrays/dom_typed_array.h"
@@ -140,10 +140,6 @@
 
   HTMLCanvasElement* canvas() const;
 
-  const UkmParameters GetUkmParameters() const {
-    return Host()->GetUkmParameters();
-  }
-
   virtual String ContextName() const = 0;
   virtual void RegisterContextExtensions() = 0;
 
@@ -2004,13 +2000,6 @@
       WebGraphicsContext3DProvider* context_provider);
   static unsigned CurrentMaxGLContexts();
 
-  void RecordIdentifiableGLParameterDigest(GLenum pname,
-                                           IdentifiableToken value);
-
-  void RecordShaderPrecisionFormatForStudy(GLenum shader_type,
-                                           GLenum precision_type,
-                                           WebGLShaderPrecisionFormat* format);
-
   void Dispose() override;
 
   // PushFrameWithCopy will make a potential copy if the resource is accelerated
diff --git a/third_party/blink/renderer/modules/webshare/navigator_share.h b/third_party/blink/renderer/modules/webshare/navigator_share.h
index 3e324579..1bc0fd1 100644
--- a/third_party/blink/renderer/modules/webshare/navigator_share.h
+++ b/third_party/blink/renderer/modules/webshare/navigator_share.h
@@ -34,7 +34,6 @@
   ~NavigatorShare() = default;
 
   // Gets, or creates, NavigatorShare supplement on Navigator.
-  // See platform/Supplementable.h
   static NavigatorShare& From(Navigator&);
 
   // Navigator partial interface
diff --git a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper_fuzzer.cc b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper_fuzzer.cc
index 56c52e9..d1743139 100644
--- a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper_fuzzer.cc
+++ b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper_fuzzer.cc
@@ -9,6 +9,7 @@
 #include <unicode/ustring.h>
 
 #include "base/command_line.h"
+#include "base/logging/logging_settings.h"
 #include "third_party/blink/renderer/platform/fonts/font.h"
 #include "third_party/blink/renderer/platform/fonts/font_cache.h"
 #include "third_party/blink/renderer/platform/fonts/plain_text_node.h"
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher_test.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher_test.cc
index ad3bf3a..50e860c 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher_test.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher_test.cc
@@ -23,6 +23,7 @@
 #include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 #include "third_party/skia/include/core/SkSurface.h"
+#include "ui/gfx/geometry/rect_f.h"
 #include "ui/gfx/mojom/presentation_feedback.mojom-blink.h"
 
 using testing::_;
@@ -423,8 +424,9 @@
 
             const auto* texture_quad =
                 static_cast<const viz::TextureDrawQuad*>(quad);
-            EXPECT_EQ(texture_quad->uv_top_left, gfx::PointF(0.0f, 0.0f));
-            EXPECT_EQ(texture_quad->uv_bottom_right, gfx::PointF(1.0f, 1.0f));
+            EXPECT_EQ(texture_quad->GetNormalizedTexCoords(
+                          gfx::Size(kWidth, kHeight)),
+                      gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f));
 
             // CanvasResourceSharedImage::CreateSoftware() creates a resource
             // whose origin is top-left.
diff --git a/third_party/blink/renderer/platform/mhtml/mhtml_archive.cc b/third_party/blink/renderer/platform/mhtml/mhtml_archive.cc
index e9b1bac9..b70fecda 100644
--- a/third_party/blink/renderer/platform/mhtml/mhtml_archive.cc
+++ b/third_party/blink/renderer/platform/mhtml/mhtml_archive.cc
@@ -34,7 +34,6 @@
 
 #include "base/containers/contains.h"
 #include "base/i18n/time_formatting.h"
-#include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "build/build_config.h"
@@ -202,23 +201,8 @@
 MHTMLArchive::MHTMLArchive() : load_result_(MHTMLLoadResult::kInvalidArchive) {}
 
 // static
-void MHTMLArchive::ReportLoadResult(MHTMLLoadResult result) {
-  UMA_HISTOGRAM_ENUMERATION("PageSerialization.MhtmlLoading.LoadResult",
-                            result);
-}
-
-// static
 MHTMLArchive* MHTMLArchive::Create(const KURL& url,
                                    scoped_refptr<const SharedBuffer> data) {
-  MHTMLArchive* archive = CreateArchive(url, data);
-  ReportLoadResult(archive->LoadResult());
-  return archive;
-}
-
-// static
-MHTMLArchive* MHTMLArchive::CreateArchive(
-    const KURL& url,
-    scoped_refptr<const SharedBuffer> data) {
   MHTMLArchive* archive = MakeGarbageCollected<MHTMLArchive>();
   archive->archive_url_ = url;
 
diff --git a/third_party/blink/renderer/platform/mhtml/mhtml_archive.h b/third_party/blink/renderer/platform/mhtml/mhtml_archive.h
index e7a473cb..e8f9b89 100644
--- a/third_party/blink/renderer/platform/mhtml/mhtml_archive.h
+++ b/third_party/blink/renderer/platform/mhtml/mhtml_archive.h
@@ -112,10 +112,6 @@
   blink::mojom::MHTMLLoadResult LoadResult() const { return load_result_; }
 
  private:
-  static MHTMLArchive* CreateArchive(const KURL&,
-                                     scoped_refptr<const SharedBuffer>);
-  static void ReportLoadResult(blink::mojom::MHTMLLoadResult result);
-
   void SetMainResource(ArchiveResource*);
   void AddSubresource(ArchiveResource*);
   static bool CanLoadArchive(const KURL&);
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index d8e1003..718bd1c 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1259,7 +1259,7 @@
     {
       // Let transforms affect anchor() and anchor-size() functions.
       name: "CSSAnchorWithTransforms",
-      status: "experimental",
+      status: "stable",
     },
     {
       // Whether <image> values are allowed as counter style <symbol>
@@ -1510,6 +1510,10 @@
       name: "CSSParserIgnoreCharsetForURLs",
     },
     {
+      name: "CSSPositionAnchorNone",
+      status: "stable",
+    },
+    {
       name: "CSSPositionStickyStaticScrollPosition",
       status: "test",
     },
@@ -1670,11 +1674,6 @@
       status: "experimental",
     },
     {
-      // crbug.com/1463890: CSS `text-autospace` property
-      name: "CSSTextAutoSpace",
-      status: "stable",
-    },
-    {
       // crbug.com/40321528
       name: "CssTextJustify",
       status: "test",
@@ -1682,7 +1681,6 @@
     {
       // crbug.com/1463890, crbug.com/1463891: CSS `text-spacing` shorthand
       name: "CSSTextSpacing",
-      depends_on: ["CSSTextAutoSpace"],
       status: "test",
     },
     {
@@ -3799,16 +3797,6 @@
       implied_by: ["GeolocationElement", "InstallElement"],
     },
     {
-      // Tracking bug for the implementation: crbug.com/352249547
-      // This flag adds having the option to show an icon in the Permission
-      // element, if developers want to.
-      // The flag will enable us to land the feature over multiple CLs, and will
-      // be enabled after the feature has been fully implemented.
-      name: "PermissionElementIcon",
-      status: "stable",
-      depends_on: ["PermissionElement"],
-    },
-    {
       name: "Permissions",
       public: true,
       status: "stable",
@@ -4378,8 +4366,7 @@
     {
       // https://github.com/WICG/view-transitions/blob/main/scoped-transitions.md
       name: "ScopedViewTransitions",
-      depends_on: ["CSSAnchorWithTransforms", "OriginatingElementIsImplicitAnchor"],
-      status: "experimental",
+      status: "experimental"
     },
     {
       // https://github.com/w3c/window-management/issues/149
@@ -4903,7 +4890,7 @@
     },
     {
       name: "SvgAnchorElementAttributes",
-      status: "experimental",
+      status: "stable",
     },
     {
       name: "SvgAnchorElementDownloadAttribute",
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 300895c..c09c4b6 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1551,11 +1551,6 @@
 
 # ====== Style team owned tests to here ======
 
-# Failing WPT tests with the RunSnapshotPostLayoutStateSteps flag enabled
-crbug.com/384523570 virtual/run-snapshot-post-layout/external/wpt/scroll-animations/scroll-timelines/effect-updateTiming.html [ Failure ]
-crbug.com/384523570 virtual/run-snapshot-post-layout/external/wpt/scroll-animations/scroll-timelines/scroll-animation-effect-phases.tentative.html [ Failure ]
-crbug.com/384523570 virtual/run-snapshot-post-layout/external/wpt/scroll-animations/scroll-timelines/updating-the-finished-state.html [ Pass Timeout ]
-
 # Tests only passing with RunSnapshotPostLayoutStateSteps enabled
 crbug.com/384523570 virtual/run-snapshot-post-layout/external/wpt/scroll-animations/scroll-timelines/scroll-timeline-snapshotting.html [ Pass ]
 crbug.com/384523570 virtual/run-snapshot-post-layout/fast/animation/scroll-animations/scroll-timeline-snapshotting.html [ Pass ]
@@ -3717,8 +3712,8 @@
 crbug.com/415666471 [ Mac ] external/wpt/speech-api/SpeechRecognition-installOnDevice.https.html [ Failure Timeout ]
 crbug.com/415666471 [ Mac ] virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-installOnDevice.https.html [ Failure Timeout ]
 crbug.com/417576322 [ Mac14 ] external/wpt/scroll-animations/css/animation-timeline-view-functional-notation.tentative.html [ Timeout ]
-crbug.com/417576322 [ Mac15-arm64 ] virtual/threaded/external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ]
-crbug.com/417576322 [ Mac14-arm64 ] virtual/threaded/external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ]
+crbug.com/40275016 [ Mac ] external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ]
+crbug.com/40275016 [ Mac ] virtual/threaded/external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ]
 [ Win11 ] external/wpt/css/css-display/display-contents-inline-002.html [ Failure ]
 [ Win11-arm64 ] external/wpt/css/css-display/display-contents-inline-002.html [ Failure ]
 [ Win10.20h2 ] external/wpt/css/css-display/display-contents-inline-002.html [ Failure ]
@@ -6622,6 +6617,33 @@
 crbug.com/1314514 [ Mac15-arm64 ] css3/blending/svg-blend-multiply.html [ Failure ]
 crbug.com/1314514 [ Win11-arm64 ] css3/blending/svg-blend-multiply.html [ Failure ]
 
+# Following tests fail on mac*-arm64
+crbug.com/461638750 [ Mac12-arm64 ] http/tests/subresource_filter/ad-highlight.html [ Failure Pass ]
+crbug.com/461638750 [ Mac13-arm64 ] http/tests/subresource_filter/ad-highlight.html [ Failure Pass ]
+crbug.com/461638750 [ Mac14-arm64 ] http/tests/subresource_filter/ad-highlight.html [ Failure Pass ]
+crbug.com/461638750 [ Mac15-arm64 ] http/tests/subresource_filter/ad-highlight.html [ Failure Pass ]
+crbug.com/461638750 [ Win11-arm64 ] http/tests/subresource_filter/ad-highlight.html [ Failure Pass ]
+crbug.com/461638750 [ Mac12-arm64 ] http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html [ Failure Pass ]
+crbug.com/461638750 [ Mac13-arm64 ] http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html [ Failure Pass ]
+crbug.com/461638750 [ Mac14-arm64 ] http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html [ Failure Pass ]
+crbug.com/461638750 [ Mac15-arm64 ] http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html [ Failure Pass ]
+crbug.com/461638750 [ Win11-arm64 ] http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html [ Failure Pass ]
+crbug.com/461638750 [ Mac12-arm64 ] http/tests/subresource_filter/ad-highlight-frame-resized.html [ Failure Pass ]
+crbug.com/461638750 [ Mac13-arm64 ] http/tests/subresource_filter/ad-highlight-frame-resized.html [ Failure Pass ]
+crbug.com/461638750 [ Mac14-arm64 ] http/tests/subresource_filter/ad-highlight-frame-resized.html [ Failure Pass ]
+crbug.com/461638750 [ Mac15-arm64 ] http/tests/subresource_filter/ad-highlight-frame-resized.html [ Failure Pass ]
+crbug.com/461638750 [ Win11-arm64 ] http/tests/subresource_filter/ad-highlight-frame-resized.html [ Failure Pass ]
+crbug.com/461638750 [ Mac12-arm64 ] http/tests/subresource_filter/ad-highlight-image.html [ Failure Pass ]
+crbug.com/461638750 [ Mac13-arm64 ] http/tests/subresource_filter/ad-highlight-image.html [ Failure Pass ]
+crbug.com/461638750 [ Mac14-arm64 ] http/tests/subresource_filter/ad-highlight-image.html [ Failure Pass ]
+crbug.com/461638750 [ Mac15-arm64 ] http/tests/subresource_filter/ad-highlight-image.html [ Failure Pass ]
+crbug.com/461638750 [ Win11-arm64 ] http/tests/subresource_filter/ad-highlight-image.html [ Failure Pass ]
+crbug.com/461638750 [ Mac12-arm64 ] http/tests/subresource_filter/ad-highlight-span-background-image.html [ Failure Pass ]
+crbug.com/461638750 [ Mac13-arm64 ] http/tests/subresource_filter/ad-highlight-span-background-image.html [ Failure Pass ]
+crbug.com/461638750 [ Mac14-arm64 ] http/tests/subresource_filter/ad-highlight-span-background-image.html [ Failure Pass ]
+crbug.com/461638750 [ Mac15-arm64 ] http/tests/subresource_filter/ad-highlight-span-background-image.html [ Failure Pass ]
+crbug.com/461638750 [ Win11-arm64 ] http/tests/subresource_filter/ad-highlight-span-background-image.html [ Failure Pass ]
+
 # Following tests fail on mac12-arm64
 crbug.com/40197500 [ Mac12-arm64 ] compositing/overflow/rotate-clip.html [ Failure ]
 crbug.com/40197500 [ Mac12-arm64 ] compositing/overflow/rotate-then-clip.html [ Failure ]
@@ -7164,8 +7186,6 @@
 crbug.com/1446711 [ Win ] virtual/media-foundation-for-clear-dcomp/media/controls/accessibility-playback-speed-button.html [ Timeout ]
 crbug.com/1472813 [ Mac ] virtual/close-watcher/external/wpt/close-watcher/user-activation-shared.html?CloseWatcher [ Timeout ]
 crbug.com/1491472 [ Mac ] virtual/shared-storage-fenced-frame-mparch/http/tests/inspector-protocol/shared-storage/debugger-pause-on-first-script.js [ Skip Timeout ]
-crbug.com/1462683 [ Mac13-arm64 ] virtual/threaded/external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ]
-crbug.com/1462683 [ Mac12-arm64 ] virtual/threaded/external/wpt/long-animation-frame/loaf-iframe-self.html [ Skip Timeout ]
 
 crbug.com/324293120 [ Debug Linux ] external/wpt/webstorage/event_case_sensitive.html [ Failure Pass ]
 
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-ignore.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-ignore.html
index 43c6e7ad..e4861879 100644
--- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-ignore.html
+++ b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-ignore.html
@@ -29,7 +29,6 @@
     // Add a div that is the container timing root
     const div1 = document.createElement('div');
     div1.setAttribute('containertiming', 'div1_ct');
-    div1.setAttribute('containertiming-nesting', 'transparent');
     document.body.appendChild(div1);
 
     // Intermediate div with containertiming-ignore blocking propagation to
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-intermediate-nesting-transparent.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-intermediate-nesting-transparent.html
deleted file mode 100644
index bff241b..0000000
--- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img-with-intermediate-nesting-transparent.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!DOCTYPE HTML>
-<meta charset=utf-8>
-<title>Container Timing: two nested containertiming nodes, with a child img inside of the inner, and an intermediate nesting policy that is not used</title>
-<body>
-<style>
-body {
-  margin: 0;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/container-timing/resources/container-timing-helpers.js"></script>
-<script src="/element-timing/resources/element-timing-helpers.js"></script>
-<script>
-  let beforeRender;
-  async_test(function (t) {
-    assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
-    const observer = new PerformanceObserver(
-      t.step_func_done(function(entryList) {
-        assert_equals(entryList.getEntries().length, 1, 'one entry expected for the image, for the inner containertiming');
-        const entry = entryList.getEntries()[0];
-        checkContainerEntry(entry, 'div3_ct', 'img_id', beforeRender)
-        checkRect(entry, [0, 100, 0, 100])
-        checkContainerSize(entry, 10000);
-      })
-    );
-    observer.observe({entryTypes: ['container']});
-
-    // Add a div that is the container timing root
-    const div1 = document.createElement('div');
-    div1.setAttribute('containertiming', 'div1_ct');
-    document.body.appendChild(div1);
-
-    // Add an intermediate div between container timing roots, that sets a
-    // nesting policy. This should be ignored.
-    const div2 = document.createElement('div');
-    div2.setAttribute('containertiming-nesting', 'transparent');
-    div1.appendChild(div2);
-
-    // Add another div, child of the first, that is also a container root
-    const div3 = document.createElement('div');
-    div3.setAttribute('containertiming', 'div3_ct');
-    div2.appendChild(div3);
-
-    // Add image of width equal to 100 and height equal to 100.
-    img = document.createElement('img');
-    img.src = '/container-timing/resources/square100.png';
-    img.setAttribute('id', 'img_id');
-    div3.appendChild(img);
-
-    beforeRender = performance.now();
-  }, 'A parent containertiming root with default nesting policy does not get paints from children containertiming roots, even if an intermediate node could set a different nesting policy.');
-</script>
-
-</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img.html
index 9a81d7d..74c74e56 100644
--- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img.html
+++ b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-child-img.html
@@ -17,11 +17,18 @@
     assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
     const observer = new PerformanceObserver(
       t.step_func_done(function(entryList) {
-        assert_equals(entryList.getEntries().length, 1, 'one entry expected for the image, for the inner containertiming');
-        const entry = entryList.getEntries()[0];
-        checkContainerEntry(entry, 'div2_ct', 'img_id', beforeRender)
-        checkRect(entry, [0, 100, 0, 100])
-        checkContainerSize(entry, 10000);
+        assert_equals(entryList.getEntries().length, 2, 'two entries expected for the image, one for each containertiming');
+        const entries = entryList.getEntries();
+
+        const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
+        checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender)
+        checkRect(entry_div1, [0, 100, 0, 100])
+        checkContainerSize(entry_div1, 10000);
+
+        const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
+        checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
+        checkRect(entry_div2, [0, 100, 0, 100])
+        checkContainerSize(entry_div2, 10000);
       })
     );
     observer.observe({entryTypes: ['container']});
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-from-invalid.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-from-invalid.html
deleted file mode 100644
index 318b663..0000000
--- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-from-invalid.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML>
-<meta charset=utf-8>
-<title>Container Timing: two nested containertiming nodes, parent gets invalid, then transparent nesting policy, with a child img inside of the inner</title>
-<body>
-<style>
-body {
-  margin: 0;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/container-timing/resources/container-timing-helpers.js"></script>
-<script src="/element-timing/resources/element-timing-helpers.js"></script>
-<script>
-  let beforeRender;
-  async_test(function (t) {
-    assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
-    const observer = new PerformanceObserver(
-      t.step_func_done(function(entryList) {
-        assert_equals(entryList.getEntries().length, 2, 'one entry expected for each of the containertiming roots');
-        const entries = entryList.getEntries();
-
-        const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
-        checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender)
-        checkRect(entry_div1, [0, 100, 0, 100])
-        checkContainerSize(entry_div1, 10000);
-
-        const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
-        checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
-        checkRect(entry_div2, [0, 100, 0, 100])
-        checkContainerSize(entry_div2, 10000);
-      })
-    );
-    observer.observe({entryTypes: ['container']});
-
-    // Add a div that is the container timing root, set invalid nesting, then
-    // transparent
-    const div1 = document.createElement('div');
-    div1.setAttribute('containertiming', 'div1_ct');
-    div1.setAttribute('containertiming-nesting', 'invalid');
-    document.body.appendChild(div1);
-    div1.setAttribute('containertiming-nesting', 'transparent');
-
-    // Add another div, child of the first, that is also a container root
-    const div2 = document.createElement('div');
-    div2.setAttribute('containertiming', 'div2_ct');
-    div1.appendChild(div2);
-
-    // Add image of width equal to 100 and height equal to 100.
-    img = document.createElement('img');
-    img.src = '/container-timing/resources/square100.png';
-    img.setAttribute('id', 'img_id');
-    div2.appendChild(img);
-
-    beforeRender = performance.now();
-  }, 'A parent containertiming root switches from invalid nesting policy to transparent, generating one painting from each container timing root.');
-</script>
-
-</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-to-invalid.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-with-ignore.html
similarity index 74%
rename from third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-to-invalid.html
rename to third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-with-ignore.html
index 4735709..13776bf 100644
--- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-nesting-change-to-invalid.html
+++ b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-containertiming-with-ignore.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML>
 <meta charset=utf-8>
-<title>Container Timing: two nested containertiming nodes, parent switching from transparent to invalid nesting policy, with a child img inside of the inner</title>
+<title>Container Timing: two nested containertiming nodes, with a child img inside of the inner, and a containertiming-ignore in the descendant root</title>
 <body>
 <style>
 body {
@@ -29,13 +29,14 @@
     // Add a div that is the container timing root
     const div1 = document.createElement('div');
     div1.setAttribute('containertiming', 'div1_ct');
-    div1.setAttribute('containertiming-nesting', 'transparent');
     document.body.appendChild(div1);
-    div1.setAttribute('containertiming-nesting', 'invalid');
 
-    // Add another div, child of the first, that is also a container root
+    // Intermediate container timing root with containertiming-ignore blocking
+    // propagation to the parent containertiming root but still receiving paints
+    // from children
     const div2 = document.createElement('div');
     div2.setAttribute('containertiming', 'div2_ct');
+    div2.setAttribute('containertiming-ignore', '');
     div1.appendChild(div2);
 
     // Add image of width equal to 100 and height equal to 100.
@@ -45,7 +46,7 @@
     div2.appendChild(img);
 
     beforeRender = performance.now();
-  }, 'A parent containertiming root switches from transparent nesting policy to invalid, generating only a paint for the inner container timing.');
+  }, 'A parent containertiming root with transparent nesting policy does not get paints from children containertiming roots with ignore.');
 </script>
 
 </body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-containertiming-child-img.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-containertiming-child-img.html
deleted file mode 100644
index 692f5015..0000000
--- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-containertiming-child-img.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE HTML>
-<meta charset=utf-8>
-<title>Container Timing: two nested containertiming nodes, parent with shadowed mode, with a child img inside of the inner</title>
-<body>
-<style>
-body {
-  margin: 0;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/container-timing/resources/container-timing-helpers.js"></script>
-<script src="/element-timing/resources/element-timing-helpers.js"></script>
-<script>
-  let beforeRender;
-  async_test(function (t) {
-    assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
-    const observer = new PerformanceObserver(
-      t.step_func_done(function(entryList) {
-        assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each container timing');
-        const entries = entryList.getEntries();
-
-        const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
-        checkContainerEntry(entry_div1, 'div1_ct', 'div2_id', beforeRender)
-        checkRect(entry_div1, [0, 100, 0, 100])
-        checkContainerSize(entry_div1, 10000);
-
-        const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
-        checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
-        checkRect(entry_div2, [0, 100, 0, 100])
-        checkContainerSize(entry_div2, 10000);
-      })
-    );
-    observer.observe({entryTypes: ['container']});
-
-    // Add a div that is the container timing root
-    const div1 = document.createElement('div');
-    div1.setAttribute('containertiming', 'div1_ct');
-    div1.setAttribute('containertiming-nesting', 'shadowed');
-    document.body.appendChild(div1);
-
-    // Add another div, child of the first, that is also a container root
-    const div2 = document.createElement('div');
-    div2.setAttribute('id', 'div2_id');
-    div2.setAttribute('containertiming', 'div2_ct');
-    div1.appendChild(div2);
-
-    // Add image of width equal to 100 and height equal to 100.
-    img = document.createElement('img');
-    img.src = '/container-timing/resources/square100.png';
-    img.setAttribute('id', 'img_id');
-    div2.appendChild(img);
-
-    beforeRender = performance.now();
-  }, 'A parent containertiming root with shadowed nesting policy gets only child containertiming paints without element data.');
-</script>
-
-</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-to-transparent-containertiming-child-img.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-to-transparent-containertiming-child-img.html
deleted file mode 100644
index ef20345..0000000
--- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-shadowed-to-transparent-containertiming-child-img.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML>
-<meta charset=utf-8>
-<title>Container Timing: two nested containertiming nodes, parent with shadowed mode changed to transparent mode, with a child img inside of the inner</title>
-<body>
-<style>
-body {
-  margin: 0;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/container-timing/resources/container-timing-helpers.js"></script>
-<script src="/element-timing/resources/element-timing-helpers.js"></script>
-<script>
-  let beforeRender;
-  async_test(function (t) {
-    assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
-    const observer = new PerformanceObserver(
-      t.step_func_done(function(entryList) {
-        assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each containertiming');
-        const entries = entryList.getEntries();
-
-        const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
-        checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender)
-        checkRect(entry_div1, [0, 100, 0, 100])
-        checkContainerSize(entry_div1, 10000);
-
-        const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
-        checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
-        checkRect(entry_div2, [0, 100, 0, 100])
-        checkContainerSize(entry_div2, 10000);
-      })
-    );
-    observer.observe({entryTypes: ['container']});
-
-    // Add a div that is the container timing root
-    const div1 = document.createElement('div');
-    div1.setAttribute('containertiming', 'div1_ct');
-    div1.setAttribute('containertiming-nesting', 'shadowed');
-    document.body.appendChild(div1);
-
-    // Add another div, child of the first, that is also a container root
-    const div2 = document.createElement('div');
-    div2.setAttribute('containertiming', 'div2_ct');
-    div1.appendChild(div2);
-
-    div1.setAttribute('containertiming-nesting', 'transparent');
-
-    // Add image of width equal to 100 and height equal to 100.
-    img = document.createElement('img');
-    img.src = '/container-timing/resources/square100.png';
-    img.setAttribute('id', 'img_id');
-    div2.appendChild(img);
-
-    beforeRender = performance.now();
-  }, 'A parent containertiming root with shadowed then transparent nesting policy gets child containertiming paints with element data.');
-</script>
-
-</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img-with-intermediate-ignore.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img-with-intermediate-ignore.html
deleted file mode 100644
index 3a0a64b6..0000000
--- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img-with-intermediate-ignore.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE HTML>
-<meta charset=utf-8>
-<title>Container Timing: two nested containertiming nodes, parent with transparent mode, with a child img inside of the inner, and an intermediate ignore node</title>
-<body>
-<style>
-body {
-  margin: 0;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/container-timing/resources/container-timing-helpers.js"></script>
-<script src="/element-timing/resources/element-timing-helpers.js"></script>
-<script>
-  let beforeRender;
-  async_test(function (t) {
-    assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
-    const observer = new PerformanceObserver(
-      t.step_func_done(function(entryList) {
-        assert_equals(entryList.getEntries().length, 1, 'only inner containertiming gets events, ignore breaks propagation to parent even if nesting is set to transparent');
-        const entry = entryList.getEntries()[0];
-        checkContainerEntry(entry, 'div3_ct', 'img_id', beforeRender)
-        checkRect(entry, [0, 100, 0, 100])
-        checkContainerSize(entry, 10000);
-      })
-    );
-    observer.observe({entryTypes: ['container']});
-
-    // Add a div that is the container timing root
-    const div1 = document.createElement('div');
-    div1.setAttribute('containertiming', 'div1_ct');
-    div1.setAttribute('containertiming-nesting', 'transparent');
-    document.body.appendChild(div1);
-
-    const div2 = document.createElement('div');
-    div2.setAttribute('containertiming-ignore', '');
-    div1.appendChild(div2);
-
-    // Add another div, child of the first, that is also a container root
-    const div3 = document.createElement('div');
-    div3.setAttribute('containertiming', 'div3_ct');
-    div2.appendChild(div3);
-
-    // Add image of width equal to 100 and height equal to 100.
-    img = document.createElement('img');
-    img.src = '/container-timing/resources/square100.png';
-    img.setAttribute('id', 'img_id');
-    div3.appendChild(img);
-
-    beforeRender = performance.now();
-  }, 'A parent containertiming root with transparent nesting policy and child containertiming including image, an intermediate ignore blocks paints to parent root.');
-</script>
-
-</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img.html
deleted file mode 100644
index 9523cc88..0000000
--- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-containertiming-child-img.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE HTML>
-<meta charset=utf-8>
-<title>Container Timing: two nested containertiming nodes, parent with transparent mode, with a child img inside of the inner</title>
-<body>
-<style>
-body {
-  margin: 0;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/container-timing/resources/container-timing-helpers.js"></script>
-<script src="/element-timing/resources/element-timing-helpers.js"></script>
-<script>
-  let beforeRender;
-  async_test(function (t) {
-    assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
-    const observer = new PerformanceObserver(
-      t.step_func_done(function(entryList) {
-        assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each containertiming');
-        const entries = entryList.getEntries();
-
-        const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
-        checkContainerEntry(entry_div1, 'div1_ct', 'img_id', beforeRender)
-        checkRect(entry_div1, [0, 100, 0, 100])
-        checkContainerSize(entry_div1, 10000);
-
-        const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
-        checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
-        checkRect(entry_div2, [0, 100, 0, 100])
-        checkContainerSize(entry_div2, 10000);
-      })
-    );
-    observer.observe({entryTypes: ['container']});
-
-    // Add a div that is the container timing root
-    const div1 = document.createElement('div');
-    div1.setAttribute('containertiming', 'div1_ct');
-    div1.setAttribute('containertiming-nesting', 'transparent');
-    document.body.appendChild(div1);
-
-    // Add another div, child of the first, that is also a container root
-    const div2 = document.createElement('div');
-    div2.setAttribute('containertiming', 'div2_ct');
-    div1.appendChild(div2);
-
-    // Add image of width equal to 100 and height equal to 100.
-    img = document.createElement('img');
-    img.src = '/container-timing/resources/square100.png';
-    img.setAttribute('id', 'img_id');
-    div2.appendChild(img);
-
-    beforeRender = performance.now();
-  }, 'A parent containertiming root with transparent nesting policy gets child containertiming paints with element data.');
-</script>
-
-</body>
diff --git a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-to-shadowed-containertiming-child-img.html b/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-to-shadowed-containertiming-child-img.html
deleted file mode 100644
index 250f779..0000000
--- a/third_party/blink/web_tests/external/wpt/container-timing/tentative/nested-transparent-to-shadowed-containertiming-child-img.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE HTML>
-<meta charset=utf-8>
-<title>Container Timing: two nested containertiming nodes, parent with transparent mode, changed to shadowed mode, with a child img inside of the inner</title>
-<body>
-<style>
-body {
-  margin: 0;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/container-timing/resources/container-timing-helpers.js"></script>
-<script src="/element-timing/resources/element-timing-helpers.js"></script>
-<script>
-  let beforeRender;
-  async_test(function (t) {
-    assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
-    const observer = new PerformanceObserver(
-      t.step_func_done(function(entryList) {
-        assert_equals(entryList.getEntries().length, 2, 'for the image, one entry expected for each container timing');
-        const entries = entryList.getEntries();
-
-        const entry_div1 = entries.find(e => e.identifier == 'div1_ct');
-        checkContainerEntry(entry_div1, 'div1_ct', 'div2_id', beforeRender)
-        checkRect(entry_div1, [0, 100, 0, 100])
-        checkContainerSize(entry_div1, 10000);
-
-        const entry_div2 = entries.find(e => e.identifier == 'div2_ct');
-        checkContainerEntry(entry_div2, 'div2_ct', 'img_id', beforeRender)
-        checkRect(entry_div2, [0, 100, 0, 100])
-        checkContainerSize(entry_div2, 10000);
-      })
-    );
-    observer.observe({entryTypes: ['container']});
-
-    // Add a div that is the container timing root
-    const div1 = document.createElement('div');
-    div1.setAttribute('containertiming', 'div1_ct');
-    div1.setAttribute('containertiming-nesting', 'transparent');
-    document.body.appendChild(div1);
-
-    // Add another div, child of the first, that is also a container root
-    const div2 = document.createElement('div');
-    div2.setAttribute('id', 'div2_id');
-    div2.setAttribute('containertiming', 'div2_ct');
-    div1.appendChild(div2);
-
-    div1.setAttribute('containertiming-nesting', 'shadowed');
-
-    // Add image of width equal to 100 and height equal to 100.
-    img = document.createElement('img');
-    img.src = '/container-timing/resources/square100.png';
-    img.setAttribute('id', 'img_id');
-    div2.appendChild(img);
-
-    beforeRender = performance.now();
-  }, 'A parent containertiming root with transparent then shadowed nesting policy gets child containertiming paints without element data.');
-</script>
-
-</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html
index 443093e..ecac6aa6 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html
@@ -16,6 +16,7 @@
     width: 100px;
     height: 100px;
     position: absolute;
+    position-anchor: auto;
 }
 #target.moved {
     margin-top: 200px;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-transition-attr.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-transition-attr.tentative.html
index 824c75c..2c2d99c5 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-transition-attr.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-transition-attr.tentative.html
@@ -25,6 +25,7 @@
   }
   #anchored {
     position: absolute;
+    position-anchor: auto;
     width: anchor-size(width);
     height: anchor-size(height);
     top: anchor(top);
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-anchor-basics.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-anchor-basics.html
index 8039903..c6d9c1f2 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-anchor-basics.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-anchor-basics.html
@@ -15,10 +15,10 @@
 
 <script>
 // position-anchor: <anchor-element>
-// <anchor-element> = auto | <dashed-ident>
+// <anchor-element> = none | auto | <dashed-ident>
 test_valid_value('position-anchor', 'auto');
 test_valid_value('position-anchor', '--foo');
-test_invalid_value('position-anchor', 'none');
+test_valid_value('position-anchor', 'none');
 test_invalid_value('position-anchor', 'foo-bar');
 test_invalid_value('position-anchor', '--foo --bar')
 test_invalid_value('position-anchor', '--foo, --bar')
@@ -26,12 +26,13 @@
 test_invalid_value('position-anchor', '100%');
 
 // Computed value: as specified
+test_computed_value('position-anchor', 'none');
 test_computed_value('position-anchor', 'auto');
 test_computed_value('position-anchor', '--foo');
 
-// Initial: auto
+// Initial: none
 // Inherited: no
-assert_not_inherited('position-anchor', 'auto', '--foo');
+assert_not_inherited('position-anchor', 'none', '--foo');
 
 // Animation type: discrete
 test_no_interpolation({
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor-dynamic.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor-dynamic.html
index 2ee47aa6..053eac5 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor-dynamic.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor-dynamic.html
@@ -15,6 +15,7 @@
     width: 100px;
     height: 100px;
     position: absolute;
+    position-anchor: auto;
 }
 #target.moved {
     margin-top: 100px;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html
index bac3e658..449540aba 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html
@@ -15,6 +15,7 @@
     width: 100px;
     height: 100px;
     position: absolute;
+    position-anchor: auto;
 }
 #target::before {
     position-area: center right;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor-center.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor-center.html
index e3506be..e5407bb 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor-center.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor-center.html
@@ -13,6 +13,7 @@
   #anchor::after {
     content: "";
     position: absolute;
+    position-anchor: auto;
     width: 100px;
     height: 100px;
     background: green;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor.html
index a719267..2a9dcd50 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/pseudo-element-implicit-anchor.html
@@ -6,6 +6,7 @@
   #anchor::after {
     content: "";
     position: absolute;
+    position-anchor: auto;
     width: 100px;
     height: 100px;
     bottom: anchor(top);
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-content-rounding.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-content-rounding.html
new file mode 100644
index 0000000..5fdbe44
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-content-rounding.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://crbug.com/40437604">
+<style>
+#flex {
+  display: flex;
+  flex-wrap: wrap;
+  width: 10px;
+  height: 40px;
+  align-content: space-between;
+  outline: solid 1px;
+}
+#flex > div {
+  width: 10px;
+  height: 5px;
+  background: lime;
+}
+</style>
+<div id="flex">
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div id="last"></div>
+</div>
+<script>
+test(function() {
+  /* Increase the flexbox by 0.1px increments. */
+  for (let i = 0; i < 10; i++) {
+    const height = (40 + i/10) + 'px';
+    flex.style.height = height;
+    assert_equals(last.getBoundingClientRect().bottom, flex.getBoundingClientRect().bottom, height);
+  }
+}, 'The last item should match the end edge.');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/justify-content-rounding.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/justify-content-rounding.html
new file mode 100644
index 0000000..d4ac31a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/justify-content-rounding.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://crbug.com/40437604">
+<style>
+#flex {
+  display: flex;
+  width: 40px;
+  justify-content: space-between;
+  outline: solid 1px;
+}
+#flex > div {
+  width: 5px;
+  height: 10px;
+  background: lime;
+}
+</style>
+<div id="flex">
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div id="last"></div>
+</div>
+<script>
+test(function() {
+  /* Increase the flexbox by 0.1px increments. */
+  for (let i = 0; i < 10; i++) {
+    const width = (40 + i/10) + 'px';
+    flex.style.width = width;
+    assert_equals(last.getBoundingClientRect().right, flex.getBoundingClientRect().right, width);
+  }
+}, 'The last item should match the end edge.');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/main-axis-margin-rounding.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/main-axis-margin-rounding.html
new file mode 100644
index 0000000..00d9c57
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/main-axis-margin-rounding.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://crbug.com/40437604">
+<style>
+#flex {
+  display: flex;
+  width: 40px;
+  height: 10px;
+  outline: solid 1px;
+}
+#flex > div {
+  width: 5px;
+  height: 10px;
+  margin-left: auto;
+  background: lime;
+}
+</style>
+<div id="flex">
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div></div>
+  <div id="last"></div>
+</div>
+<script>
+test(function() {
+  /* Increase the flexbox by 0.1px increments. */
+  for (let i = 0; i < 10; i++) {
+    const width = (40 + i/10) + 'px';
+    flex.style.width = width;
+    assert_equals(last.getBoundingClientRect().right, flex.getBoundingClientRect().right, width);
+  }
+}, 'The last item should match the end edge.');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031-ref.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031-ref.html
new file mode 100644
index 0000000..ec5fe7b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031-ref.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
+<style>
+    body {
+        margin: 0px;
+    }
+
+    #flexbox>* {
+        background-color: rgb(96 139 168 / 0.2);
+    }
+
+    #flexbox {
+        display: flex;
+        column-gap: 10px;
+        row-gap: 30px;
+        height: 130px;
+        width: 230px;
+        flex-wrap: wrap;
+        align-content: center;
+    }
+
+    .items {
+        width: 70px;
+        height: 50px;
+        writing-mode: vertical-rl;
+    }
+
+    .row-rule {
+        position: absolute;
+        height: 30px;
+        width: 70px;
+        background: blue;
+        top: 50px;
+    }
+
+    .col-rule {
+        position: absolute;
+        width: 10px;
+        height: 50px;
+        background: red;
+    }
+</style>
+
+<div class="row-rule" style="left: 0px;"></div>
+<div class="row-rule" style="left: 80px;"></div>
+<div class="row-rule" style="left: 160px;"></div>
+
+<div class="col-rule" style="left: 70px;"></div>
+<div class="col-rule" style="left: 70px; top: 80px;"></div>
+<div class="col-rule" style="left: 150px;"></div>
+<div class="col-rule" style="left: 150px; top: 80px;"></div>
+
+<div id="flexbox">
+    <div class="items">One</div>
+    <div class="items">Two</div>
+    <div class="items">Three</div>
+    <div class="items">Four</div>
+    <div class="items">Five</div>
+    <div class="items">Six</div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031.html
new file mode 100644
index 0000000..57f3ad2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-031.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<title>
+    CSS Gap Decorations: flex column and row gaps are painted with rule break intersection and orthogonal items.
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="match" href="flex-gap-decorations-031-ref.html">
+<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
+<style>
+    body {
+        margin: 0px;
+    }
+
+    #flexbox>* {
+        background-color: rgb(96 139 168 / 0.2);
+    }
+
+    #flexbox {
+        display: flex;
+        column-gap: 10px;
+        column-rule: 10px solid red;
+        column-rule-break: intersection;
+        column-rule-inset: 0;
+        row-gap: 30px;
+        row-rule: 30px solid blue;
+        row-rule-break: intersection;
+        row-rule-inset: 0;
+        height: 130px;
+        width: 230px;
+        flex-wrap: wrap;
+        align-content: center;
+    }
+
+    .items {
+        width: 70px;
+        height: 50px;
+        writing-mode: vertical-rl;
+    }
+</style>
+
+<div id="flexbox">
+    <div class="items">One</div>
+    <div class="items">Two</div>
+    <div class="items">Three</div>
+    <div class="items">Four</div>
+    <div class="items">Five</div>
+    <div class="items">Six</div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032-ref.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032-ref.html
new file mode 100644
index 0000000..90ae251e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032-ref.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
+<style>
+    body {
+        margin: 0px;
+    }
+
+    #flexbox>* {
+        background-color: rgb(96 139 168 / 0.2);
+    }
+
+    #flexbox {
+        display: flex;
+        column-gap: 10px;
+        row-gap: 30px;
+        height: 130px;
+        width: 230px;
+        flex-wrap: wrap;
+        align-content: center;
+    }
+
+    .items {
+        width: 70px;
+        height: 50px;
+        writing-mode: vertical-rl;
+    }
+
+    .row-rule {
+        position: absolute;
+        height: 30px;
+        width: 230px;
+        background: blue;
+        top: 50px;
+    }
+
+    .col-rule {
+        position: absolute;
+        width: 10px;
+        height: 130px;
+        background: red;
+    }
+</style>
+
+
+<div class="col-rule" style="left: 70px;"></div>
+<div class="col-rule" style="left: 150px;"></div>
+
+<div class="row-rule" style="left: 0px;"></div>
+
+<div id="flexbox">
+    <div class="items">One</div>
+    <div class="items">Two</div>
+    <div class="items">Three</div>
+    <div class="items">Four</div>
+    <div class="items">Five</div>
+    <div class="items">Six</div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032.html
new file mode 100644
index 0000000..46b0d8b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/flex/flex-gap-decorations-032.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<title>
+    CSS Gap Decorations: flex column and row gaps are painted with orthogonal items.
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="match" href="flex-gap-decorations-032-ref.html">
+<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
+<style>
+    body {
+        margin: 0px;
+    }
+
+    #flexbox>* {
+        background-color: rgb(96 139 168 / 0.2);
+    }
+
+    #flexbox {
+        display: flex;
+        column-gap: 10px;
+        column-rule: 10px solid red;
+        row-gap: 30px;
+        row-rule: 30px solid blue;
+        height: 130px;
+        width: 230px;
+        flex-wrap: wrap;
+        align-content: center;
+    }
+
+    .items {
+        width: 70px;
+        height: 50px;
+        writing-mode: vertical-rl;
+    }
+</style>
+
+<div id="flexbox">
+    <div class="items">One</div>
+    <div class="items">Two</div>
+    <div class="items">Three</div>
+    <div class="items">Four</div>
+    <div class="items">Five</div>
+    <div class="items">Six</div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024-ref.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024-ref.html
new file mode 100644
index 0000000..5250625
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024-ref.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
+<style>
+    body {
+        margin: 0px;
+    }
+
+    .container {
+        width: 200px;
+        height: 150px;
+        column-count: 3;
+        column-width: 60px;
+        column-height: 70px;
+        column-gap: 10px;
+        row-gap: 10px;
+        column-wrap: wrap;
+    }
+
+    .items {
+        background: rgb(96 139 168 / 0.2);
+        height: 70px;
+        width: 60px;
+        margin: 0px;
+        writing-mode: vertical-rl;
+    }
+
+    .col-rule {
+        position: absolute;
+        top: 0px;
+        height: 150px;
+        width: 10px;
+        background: blue;
+    }
+
+    .row-rule {
+        position: absolute;
+        height: 10px;
+        width: 200px;
+        background: gold;
+        left: 0px;
+        top: 70px;
+    }
+</style>
+
+<div class="col-rule" style="left: 60px;"></div>
+<div class="col-rule" style="left: 130px;"></div>
+
+<div class="row-rule"></div>
+
+<div class="container">
+    <div class="items"></div>
+    <div class="items"></div>
+    <div class="items"></div>
+    <div class="items"></div>
+    <div class="items"></div>
+    <div class="items"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024.html b/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024.html
new file mode 100644
index 0000000..8684e48
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-gaps/multicol/multicol-gap-decorations-024.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<title>
+    CSS Gap Decorations: Multicolumn gap decorations painted with column-wrap and orthogonal items.
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="match" href="multicol-gap-decorations-024-ref.html">
+<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
+<style>
+    body {
+        margin: 0px;
+    }
+
+    .container {
+        width: 200px;
+        height: 150px;
+        column-count: 3;
+        column-width: 60px;
+        column-height: 70px;
+        column-gap: 10px;
+        row-gap: 10px;
+        column-rule: 10px solid blue;
+        row-rule: 10px solid gold;
+        column-wrap: wrap;
+    }
+
+    .items {
+        background: rgb(96 139 168 / 0.2);
+        height: 70px;
+        width: 60px;
+        margin: 0px;
+        writing-mode: vertical-rl;
+    }
+</style>
+
+<div class="container">
+    <div class="items"></div>
+    <div class="items"></div>
+    <div class="items"></div>
+    <div class="items"></div>
+    <div class="items"></div>
+    <div class="items"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/content-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/content-ref.html
index 47a055a..1216fdf 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/content-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/content-ref.html
@@ -6,7 +6,7 @@
 body { margin: 20px }
 #scope {
   position: relative; z-index: 0; background: pink;
-  border: 5px solid yellow; padding: 5px;
+  border: 5px dashed purple; padding: 5px;
   width: 180px; height: 120px;
 }
 #part {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/container-query-2..html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/container-query-2..html
deleted file mode 100644
index f3fd4fe..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/container-query-2..html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html class="test-wait">
-<style>
-  #scope {
-    container-type: inline-size;
-    position: absolute;
-  }
-</style>
-<div id="scope">
-  <span>Crash?</span>
-</div>
-</body>
-<script>
-  window.onload = async () => {
-    const vt = scope.startViewTransition(() => {
-      scope.querySelector('span').style.backgroundColor = "green";
-    });
-    await vt.ready;
-    document.documentElement.classList.remove("test-wait");
-  };
-</script>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/to-scale-zero.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/to-scale-zero.html
similarity index 86%
rename from third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/to-scale-zero.html
rename to third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/to-scale-zero.html
index b3a3577b..531cb08 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/crashtests/to-scale-zero.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/to-scale-zero.html
@@ -1,12 +1,14 @@
 <!DOCTYPE html>
-<html>
+<html class="reftest-wait">
 <head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
+  <link rel="match" href="empty-ref.html">
   <title>Scoped view-transition to scale 0</title>
   <!-- TODO update link -->
   <link rel="help" href="https://www.w3.org/TR/css-view-transitions-2/">
 </head>
+<script src="/common/reftest-wait.js"></script>
 <script src="/dom/events/scrolling/scroll_support.js"></script>
 <style>
   #target {
@@ -40,10 +42,10 @@
     const target = document.getElementById('target');
     await waitForCompositorReady();
     const vt = target.startViewTransition(() => {
-      // Transform becomes singular. Object is no longer rendered.
       target.classList.toggle('collapsed');
     });
-    await vt.finished;
+    await vt.ready;
+    requestAnimationFrame(takeScreenshot);
   };
 </script>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/view-transition-is-anchor-auto.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/view-transition-is-anchor-auto.html
deleted file mode 100644
index 9f8d7ea..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scoped/view-transition-is-anchor-auto.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <link rel="help" href="https://www.w3.org/TR/css-view-transitions-2/">
-  <meta name="author" content="vmpstr@chromium.org">
-  <title>Position anchor is auto on view transition</title>
-</head>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<div id="scope" class="block"></div>
-
-<script>
-promise_test(() => {
-  return scope.startViewTransition().ready.then(() => {
-    assert_equals(getComputedStyle(scope, "::view-transition").positionAnchor, "auto");
-  });
-});
-</script>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/effect-updateTiming.html b/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/effect-updateTiming.html
index a7a0b5a..a5aa14ba 100644
--- a/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/effect-updateTiming.html
+++ b/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/effect-updateTiming.html
@@ -466,6 +466,7 @@
   await anim.ready;
   scroller.scrollTop = maxScroll * 0.07
   await waitForNextFrame();
+  await waitForNextFrame();
 
   assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.07,
                              'progress before updating direction');
@@ -520,6 +521,7 @@
   await anim.ready;
   scroller.scrollTop = maxScroll * 0.17 // 34% through first iteration
   await waitForNextFrame();
+  await waitForNextFrame();
 
   assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.34,
                              'progress before updating direction');
@@ -541,6 +543,7 @@
   await anim.ready;
   scroller.scrollTop = maxScroll * 0.17
   await waitForNextFrame();
+  await waitForNextFrame();
   // anim.currentTime = 17000; // 34% through first iteration
   assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.34,
                              'progress before updating direction');
@@ -616,6 +619,7 @@
 
   scroller.scrollTop = maxScroll * 0.875
   await waitForNextFrame();
+  await waitForNextFrame();
 
   assert_equals(anim.effect.getComputedTiming().progress, 0.5,
                 'change currentTime to active phase');
diff --git a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt
index 50aeaa7..1b5b048e 100644
--- a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt
+++ b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt
@@ -324,7 +324,7 @@
 perspective-origin: 384.5px 0px
 pointer-events: auto
 position: static
-position-anchor: auto
+position-anchor: none
 position-area: none
 position-try-fallbacks: none
 position-try-order: normal
diff --git a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
index 2eff4e3a..629c0057 100644
--- a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
+++ b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
@@ -324,7 +324,7 @@
 perspective-origin: 50% 50%
 pointer-events: auto
 position: static
-position-anchor: auto
+position-anchor: none
 position-area: none
 position-try-fallbacks: none
 position-try-order: normal
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-expected.png b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-expected.png
index 33a1af44..5fe716f8 100644
--- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-expected.png
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport-expected.png b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport-expected.png
index 60e9327..21f534a 100644
--- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport-expected.png
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html
index 17a1f5e..479dabd 100644
--- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-larger-than-viewport.html
@@ -22,10 +22,15 @@
 // Scroll down to verify that the overlay is drawn correctly for the portion of the
 // frame that is larger than the viewport.
 window.scrollTo(0, 400);
-// Finish the test once the ad frame is loaded.
+
 ad_frame.onload = function () {
-  if (window.testRunner)
-    testRunner.notifyDone();
+  // Finish the test after the ad highlight is drawn.
+  requestAnimationFrame(function() {
+    requestAnimationFrame(function() {
+      if (window.testRunner)
+        testRunner.notifyDone();
+    });
+  });
 }
 ad_frame.src = "about:blank";
 
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized-expected.png b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized-expected.png
index 9ff235b..7c6fe58 100644
--- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized-expected.png
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized.html b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized.html
index 5a194f60..32df781 100644
--- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized.html
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-frame-resized.html
@@ -10,12 +10,18 @@
 ad_frame = createAdFrame();
 ad_frame.width = 100;
 ad_frame.height = 200;
-// Finish the test once the ad frame is loaded.
+
 ad_frame.onload = function () {
   // Resize the frame to verify that the highlight is also resized.
   ad_frame.width = 300;
-  if (window.testRunner)
-    testRunner.notifyDone();
+
+  // Finish the test after the ad highlight is drawn.
+  requestAnimationFrame(function() {
+    requestAnimationFrame(function() {
+      if (window.testRunner)
+        testRunner.notifyDone();
+    });
+  });
 }
 ad_frame.src = "about:blank";
 
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image-expected.png b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image-expected.png
new file mode 100644
index 0000000..1c9ad6f
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image.html b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image.html
new file mode 100644
index 0000000..bfca177
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-image.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script type="text/javascript">
+if (window.testRunner) {
+  testRunner.setHighlightAds();
+
+  // Tag 'alpha.png' as an ad resource.
+  testRunner.setDisallowedSubresourcePathSuffixes(["alpha.png"], false /* block_subresources */);
+}
+
+const img = document.createElement('img');
+img.width = 100;
+img.height = 200;
+img.src = "resources/alpha.png";
+
+img.onload = function () {
+  // Finish the test after the ad highlight is drawn.
+  requestAnimationFrame(function() {
+    requestAnimationFrame(function() {
+      if (window.testRunner)
+        testRunner.notifyDone();
+    });
+  });
+}
+
+document.body.appendChild(img);
+
+if (window.testRunner)
+  testRunner.waitUntilDone();
+
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image-expected.png b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image-expected.png
new file mode 100644
index 0000000..85480ecc
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image.html b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image.html
new file mode 100644
index 0000000..4cf3edf9
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight-span-background-image.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script type="text/javascript">
+if (window.testRunner) {
+  testRunner.setHighlightAds();
+
+  // Tag 'alpha.png' as an ad resource.
+  testRunner.setDisallowedSubresourcePathSuffixes(["alpha.png"], false /* block_subresources */);
+}
+
+// Create an Image object to preload the resource.
+const preloader = new Image();
+
+// Define the onload callback for the preloader.
+// This fires when the image is downloaded and decoded.
+preloader.onload = function () {
+  // Now that the image is loaded, create the span.
+  const span = document.createElement('span');
+
+  span.style.display = "block";
+  span.style.width = "100px";
+  span.style.height = "200px";
+  span.style.backgroundImage = "url(resources/alpha.png)";
+
+  document.body.appendChild(span);
+
+  // Finish the test after the ad highlight is drawn.
+  requestAnimationFrame(function() {
+    requestAnimationFrame(function() {
+      if (window.testRunner)
+        testRunner.notifyDone();
+    });
+  });
+}
+
+preloader.src = "resources/alpha.png";
+
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight.html b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight.html
index 7d5e4f55..064eceb 100644
--- a/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight.html
+++ b/third_party/blink/web_tests/http/tests/subresource_filter/ad-highlight.html
@@ -10,10 +10,15 @@
 ad_frame = createAdFrame();
 ad_frame.width = 100;
 ad_frame.height = 200;
-// Finish the test once the ad frame is loaded.
+
 ad_frame.onload = function () {
-  if (window.testRunner)
-    testRunner.notifyDone();
+  // Finish the test after the ad highlight is drawn.
+  requestAnimationFrame(function() {
+    requestAnimationFrame(function() {
+      if (window.testRunner)
+        testRunner.notifyDone();
+    });
+  });
 }
 ad_frame.src = "about:blank";
 
diff --git a/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt b/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt
index 5d7c76e9..90fdb66 100644
--- a/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt
+++ b/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt
@@ -324,7 +324,7 @@
 perspective-origin: 0px 0px
 pointer-events: auto
 position: static
-position-anchor: auto
+position-anchor: none
 position-area: none
 position-try-fallbacks: none
 position-try-order: normal
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt
index 945d49b..451602c 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt
@@ -1574,14 +1574,18 @@
     property getCTM
     property getScreenCTM
     property href
+    property hreflang
     property interestForElement
     property nearestViewportElement
+    property ping
+    property referrerPolicy
     property rel
     property relList
     property requiredExtensions
     property systemLanguage
     property target
     property transform
+    property type
 svg element animate
     property beginElement
     property beginElementAt
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
index a701742..6cbb04bf 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -7599,15 +7599,23 @@
     attribute @@toStringTag
     getter download
     getter href
+    getter hreflang
     getter interestForElement
+    getter ping
+    getter referrerPolicy
     getter rel
     getter relList
     getter target
+    getter type
     method constructor
     setter download
+    setter hreflang
     setter interestForElement
+    setter ping
+    setter referrerPolicy
     setter rel
     setter relList
+    setter type
 interface SVGAngle
     attribute @@toStringTag
     attribute SVG_ANGLETYPE_DEG
diff --git a/third_party/blink/web_tests/virtual/threaded/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt b/third_party/blink/web_tests/virtual/threaded/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
index 59b7357..1ce22d32 100644
--- a/third_party/blink/web_tests/virtual/threaded/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
+++ b/third_party/blink/web_tests/virtual/threaded/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
@@ -190,13 +190,13 @@
                                     [0] : {
                                         specificity : {
                                             a : 0
-                                            b : 1
+                                            b : 0
                                             c : 1
                                         }
-                                        text : :root::view-transition
+                                        text : ::view-transition
                                     }
                                 ]
-                                text : :root::view-transition
+                                text : ::view-transition
                             }
                             startingStyles : [
                             ]
@@ -2402,13 +2402,13 @@
                             [0] : {
                                 specificity : {
                                     a : 0
-                                    b : 1
+                                    b : 0
                                     c : 1
                                 }
-                                text : :root::view-transition
+                                text : ::view-transition
                             }
                         ]
-                        text : :root::view-transition
+                        text : ::view-transition
                     }
                     startingStyles : [
                     ]
diff --git a/third_party/blink/web_tests/virtual/view-transition-mpa-serialization/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt b/third_party/blink/web_tests/virtual/view-transition-mpa-serialization/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
index 59b7357..1ce22d32 100644
--- a/third_party/blink/web_tests/virtual/view-transition-mpa-serialization/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
+++ b/third_party/blink/web_tests/virtual/view-transition-mpa-serialization/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
@@ -190,13 +190,13 @@
                                     [0] : {
                                         specificity : {
                                             a : 0
-                                            b : 1
+                                            b : 0
                                             c : 1
                                         }
-                                        text : :root::view-transition
+                                        text : ::view-transition
                                     }
                                 ]
-                                text : :root::view-transition
+                                text : ::view-transition
                             }
                             startingStyles : [
                             ]
@@ -2402,13 +2402,13 @@
                             [0] : {
                                 specificity : {
                                     a : 0
-                                    b : 1
+                                    b : 0
                                     c : 1
                                 }
-                                text : :root::view-transition
+                                text : ::view-transition
                             }
                         ]
-                        text : :root::view-transition
+                        text : ::view-transition
                     }
                     startingStyles : [
                     ]
diff --git a/third_party/blink/web_tests/virtual/view-transition-wide-gamut/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt b/third_party/blink/web_tests/virtual/view-transition-wide-gamut/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
index 59b7357..1ce22d32 100644
--- a/third_party/blink/web_tests/virtual/view-transition-wide-gamut/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
+++ b/third_party/blink/web_tests/virtual/view-transition-wide-gamut/inspector-protocol/css/css-get-styles-for-view-transition-expected.txt
@@ -190,13 +190,13 @@
                                     [0] : {
                                         specificity : {
                                             a : 0
-                                            b : 1
+                                            b : 0
                                             c : 1
                                         }
-                                        text : :root::view-transition
+                                        text : ::view-transition
                                     }
                                 ]
-                                text : :root::view-transition
+                                text : ::view-transition
                             }
                             startingStyles : [
                             ]
@@ -2402,13 +2402,13 @@
                             [0] : {
                                 specificity : {
                                     a : 0
-                                    b : 1
+                                    b : 0
                                     c : 1
                                 }
-                                text : :root::view-transition
+                                text : ::view-transition
                             }
                         ]
-                        text : :root::view-transition
+                        text : ::view-transition
                     }
                     startingStyles : [
                     ]
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
index 3424a297..dab7315 100644
--- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -113,7 +113,6 @@
     property computedStyleMap
     property containerTiming
     property containerTimingIgnore
-    property containerTimingNesting
     property contains
     property contentEditable
     property currentCSSZoom
@@ -1439,7 +1438,6 @@
     property computedStyleMap
     property containerTiming
     property containerTimingIgnore
-    property containerTimingNesting
     property contains
     property currentCSSZoom
     property currentPatch
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index e2848a8..9dae303 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -2502,7 +2502,6 @@
     getter computedRole
     getter containerTiming
     getter containerTimingIgnore
-    getter containerTimingNesting
     getter currentCSSZoom
     getter currentPatch
     getter elementTiming
@@ -2659,7 +2658,6 @@
     setter className
     setter containerTiming
     setter containerTimingIgnore
-    setter containerTimingNesting
     setter elementTiming
     setter headingOffset
     setter headingReset
diff --git a/third_party/boringssl/src b/third_party/boringssl/src
index 9b86817..61ca3f24 160000
--- a/third_party/boringssl/src
+++ b/third_party/boringssl/src
@@ -1 +1 @@
-Subproject commit 9b86817b23dfbf6e0837df8862a4112c51b4ea3b
+Subproject commit 61ca3f2493360393f534d9775b0e80fb39fd2153
diff --git a/third_party/crashpad/crashpad/handler/handler_main.cc b/third_party/crashpad/crashpad/handler/handler_main.cc
index 6eca8415..05f9c34 100644
--- a/third_party/crashpad/crashpad/handler/handler_main.cc
+++ b/third_party/crashpad/crashpad/handler/handler_main.cc
@@ -32,6 +32,7 @@
 #include "base/files/file_path.h"
 #include "base/files/scoped_file.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/metrics/persistent_histogram_allocator.h"
 #include "base/scoped_generic.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/third_party/crashpad/crashpad/test/gtest_main.cc b/third_party/crashpad/crashpad/test/gtest_main.cc
index 63f13c5..f74ba42 100644
--- a/third_party/crashpad/crashpad/test/gtest_main.cc
+++ b/third_party/crashpad/crashpad/test/gtest_main.cc
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "build/build_config.h"
 #include "gtest/gtest.h"
 #include "test/main_arguments.h"
diff --git a/third_party/crossbench b/third_party/crossbench
index 1572106..6945a4d 160000
--- a/third_party/crossbench
+++ b/third_party/crossbench
@@ -1 +1 @@
-Subproject commit 1572106a98d0970b6ae54e2ac8b1ae00ec9437e4
+Subproject commit 6945a4d9f99a39970cd6e10e5794b675cf092fa6
diff --git a/third_party/dawn b/third_party/dawn
index e05063e..026bc05 160000
--- a/third_party/dawn
+++ b/third_party/dawn
@@ -1 +1 @@
-Subproject commit e05063e54542a646fd297a3e8d8c9f2faf8685e5
+Subproject commit 026bc053ee69caf59c9767756415560327cd4169
diff --git a/third_party/depot_tools b/third_party/depot_tools
index 565cc4e..b8f2030 160000
--- a/third_party/depot_tools
+++ b/third_party/depot_tools
@@ -1 +1 @@
-Subproject commit 565cc4ee354f0c394d0d83301e6658b1fc979c99
+Subproject commit b8f203014fd4a509eed94dfca84934136f5d26e5
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src
index e5c1166..51f0ad7 160000
--- a/third_party/devtools-frontend/src
+++ b/third_party/devtools-frontend/src
@@ -1 +1 @@
-Subproject commit e5c11667c31285d64f215bfc2cd4affce30a97e8
+Subproject commit 51f0ad70911e7688153c37f590cb12a8f12ec4d0
diff --git a/third_party/glslang/src b/third_party/glslang/src
index 7099c12..14be844 160000
--- a/third_party/glslang/src
+++ b/third_party/glslang/src
@@ -1 +1 @@
-Subproject commit 7099c123729e02f81d70559e79ee4360096fdfe5
+Subproject commit 14be844d5effc487de8c15d0507d65ce3d19c994
diff --git a/third_party/lit/v3_0/BUILD.gn b/third_party/lit/v3_0/BUILD.gn
index 2bc363df..bb3be7a0 100644
--- a/third_party/lit/v3_0/BUILD.gn
+++ b/third_party/lit/v3_0/BUILD.gn
@@ -81,6 +81,7 @@
     "//chrome/browser/resources/suggest_internals:build_ts",
     "//chrome/browser/resources/tab_group_home:build_ts",
     "//chrome/browser/resources/tab_search:build_ts",
+    "//chrome/browser/resources/updater:build_ts",
     "//chrome/browser/resources/user_education_internals:build_ts",
     "//chrome/browser/resources/watermark:build_ts",
     "//chrome/browser/resources/webui_browser:build_ts",
diff --git a/third_party/openscreen/src b/third_party/openscreen/src
index 3fbbb54..39fa0ff 160000
--- a/third_party/openscreen/src
+++ b/third_party/openscreen/src
@@ -1 +1 @@
-Subproject commit 3fbbb548aa18f2fb2b5c4453377cafe48f782bcc
+Subproject commit 39fa0ff22414b59df16a6d8f032b2595c73c6d59
diff --git a/third_party/perfetto b/third_party/perfetto
index 10ac9fc..60767b0 160000
--- a/third_party/perfetto
+++ b/third_party/perfetto
@@ -1 +1 @@
-Subproject commit 10ac9fc0b09895e39f29d6ef444d496c510856d1
+Subproject commit 60767b0bac8bea553a5cb85a5a79a0a36ee52547
diff --git a/third_party/puffin/src/chromium_main.cc b/third_party/puffin/src/chromium_main.cc
index 6cf9bb5..14d41e2 100644
--- a/third_party/puffin/src/chromium_main.cc
+++ b/third_party/puffin/src/chromium_main.cc
@@ -16,6 +16,7 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/strings/sys_string_conversions.h"
 
 #include "puffin/file_stream.h"
diff --git a/third_party/re2/OWNERS b/third_party/re2/OWNERS
index e542f4ad..d86ef942 100644
--- a/third_party/re2/OWNERS
+++ b/third_party/re2/OWNERS
@@ -1,2 +1,2 @@
-junyer@chromium.org
+hans@chromium.org
 thakis@chromium.org
diff --git a/third_party/skia b/third_party/skia
index ca90609..f3ddc70 160000
--- a/third_party/skia
+++ b/third_party/skia
@@ -1 +1 @@
-Subproject commit ca906091e1997742fab665d567a448c7639bcac6
+Subproject commit f3ddc700abc7e8711f7942af73c22b867dfde432
diff --git a/third_party/spirv-tools/src b/third_party/spirv-tools/src
index 2c1fd89..fb74718 160000
--- a/third_party/spirv-tools/src
+++ b/third_party/spirv-tools/src
@@ -1 +1 @@
-Subproject commit 2c1fd8974f5d9c04629fd51bd4468fce5fed104d
+Subproject commit fb7471844504abb16b732dc4fc0837119a32ec24
diff --git a/third_party/vulkan-deps b/third_party/vulkan-deps
index 14e2627..e66c42f 160000
--- a/third_party/vulkan-deps
+++ b/third_party/vulkan-deps
@@ -1 +1 @@
-Subproject commit 14e2627bfd234012a8a4a24f150b84af390d1b3a
+Subproject commit e66c42f2bb26e9c388dd30c6f10eba8d2cb9fd3b
diff --git a/third_party/vulkan-validation-layers/src b/third_party/vulkan-validation-layers/src
index 9c7428d3..b1bf1ca 160000
--- a/third_party/vulkan-validation-layers/src
+++ b/third_party/vulkan-validation-layers/src
@@ -1 +1 @@
-Subproject commit 9c7428d35816443597f9e66035774ab7c6da2cd6
+Subproject commit b1bf1caabfaef4eebc15ee00c6ee952eaeeb12d6
diff --git a/third_party/webrtc b/third_party/webrtc
index d3dc334..59391e5 160000
--- a/third_party/webrtc
+++ b/third_party/webrtc
@@ -1 +1 @@
-Subproject commit d3dc33415dba12a7b26bae4b667970468fcb256b
+Subproject commit 59391e5e8ae6c4da9aa464d199d57e4a62a7d961
diff --git a/third_party/win_virtual_display/controller/DEPS b/third_party/win_virtual_display/controller/DEPS
index 5678bebf..95f9ccf 100644
--- a/third_party/win_virtual_display/controller/DEPS
+++ b/third_party/win_virtual_display/controller/DEPS
@@ -1,3 +1,4 @@
 include_rules = [
   '+base/logging.h',
+  '+base/logging/logging_settings.h',
 ]
diff --git a/third_party/win_virtual_display/controller/display_driver_controller_main.cc b/third_party/win_virtual_display/controller/display_driver_controller_main.cc
index d9b8f08..246b3e2 100644
--- a/third_party/win_virtual_display/controller/display_driver_controller_main.cc
+++ b/third_party/win_virtual_display/controller/display_driver_controller_main.cc
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "third_party/win_virtual_display/controller/display_driver_controller.h"
 
 namespace {
diff --git a/third_party/wireplumber/3pp/3pp.pb b/third_party/wireplumber/3pp/3pp.pb
index 9aa842be..7f70ab26 100644
--- a/third_party/wireplumber/3pp/3pp.pb
+++ b/third_party/wireplumber/3pp/3pp.pb
@@ -12,7 +12,7 @@
 
   build {
     dep: "chromium/third_party/glib"
-    dep: "chromium/third_party/pipewire-1.4"
+    dep: "chromium/third_party/pipewire"
     install: "install.sh"
     external_tool: "infra/3pp/tools/cpython3/${platform}@3@3.11.10.chromium.35"
   }
diff --git a/tools/android/forwarder2/daemon.cc b/tools/android/forwarder2/daemon.cc
index 33d13e4..032dad04 100644
--- a/tools/android/forwarder2/daemon.cc
+++ b/tools/android/forwarder2/daemon.cc
@@ -23,6 +23,7 @@
 #include "base/check_op.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec
index 037c379..448a1fa 100644
--- a/tools/gritsettings/resource_ids.spec
+++ b/tools/gritsettings/resource_ids.spec
@@ -780,6 +780,10 @@
     "META": {"sizes": {"includes": [5]}},
     "includes": [5270],
   },
+  "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/updater/resources.grd": {
+    "META": {"sizes": {"includes": [30]}},
+    "includes": [5280],
+  },
   # END chrome/ WebUI resources section
 
   # START chrome/ miscellaneous section.
diff --git a/tools/licenses/licenses.py b/tools/licenses/licenses.py
index 514be06..7f22f02d 100755
--- a/tools/licenses/licenses.py
+++ b/tools/licenses/licenses.py
@@ -108,8 +108,6 @@
     os.path.join('third_party', 'wix'),
     # See crbug.com/350472
     os.path.join('chrome', 'browser', 'resources', 'chromeos', 'quickoffice'),
-    # Chrome for Android proprietary code.
-    os.path.join('clank'),
 
     # Proprietary barcode detection library.
     os.path.join('third_party', 'barhopper'),
@@ -147,7 +145,7 @@
 
 # A list of paths that contain license information but that would otherwise
 # not be included.  Possible reasons include:
-#   - Third party directories in //clank which are considered to be Google-owned
+#   - Third party directories in //internal which are considered to be Google-owned
 #   - Directories that are directly checked out from upstream, and thus
 #     don't have a README.chromium
 #   - Directories that contain example code, or build tooling.
diff --git a/tools/mac/power/power_sampler/power_sampler_main.cc b/tools/mac/power/power_sampler/power_sampler_main.cc
index 071ec70..57e2150 100644
--- a/tools/mac/power/power_sampler/power_sampler_main.cc
+++ b/tools/mac/power/power_sampler/power_sampler_main.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include <signal.h>
+
 #include <cstdio>
 #include <iostream>
 #include <memory>
@@ -11,6 +12,7 @@
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/power_monitor/iopm_power_source_sampling_event_source.h"
 #include "base/power_monitor/timer_sampling_event_source.h"
 #include "base/process/process_handle.h"
diff --git a/tools/memory/simulator/memory_simulator_main.cc b/tools/memory/simulator/memory_simulator_main.cc
index 91073a8..8f2ba48 100644
--- a/tools/memory/simulator/memory_simulator_main.cc
+++ b/tools/memory/simulator/memory_simulator_main.cc
@@ -12,6 +12,7 @@
 #include "base/functional/callback_forward.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 5d5551be..0911a519b 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -8160,6 +8160,8 @@
   <int value="-2098150649" label="ForceListTabSwitcher:enabled"/>
   <int value="-2097906903" label="ArcNearbySharing:disabled"/>
   <int value="-2097895488" label="NotificationScrollBar:enabled"/>
+  <int value="-2097822155"
+      label="ProfileCreationFrictionReductionExperiment:enabled"/>
   <int value="-2097737027" label="SkiaGraphite:disabled"/>
   <int value="-2097515669" label="disable-cast"/>
   <int value="-2097013050" label="WaylandTextInputV3:disabled"/>
@@ -20233,6 +20235,8 @@
   <int value="2117485960" label="SupportPepperVideoDecoderDevAPI:disabled"/>
   <int value="2118287149" label="HelpAppSearchServiceIntegration:enabled"/>
   <int value="2118374092" label="MessagesForAndroidReaderMode:disabled"/>
+  <int value="2119256759"
+      label="ProfileCreationFrictionReductionExperiment:disabled"/>
   <int value="2119575519" label="ComposeUiRefinement:enabled"/>
   <int value="2119964154" label="enable-download-resumption"/>
   <int value="2120179658" label="FeedHeaderRemoval:enabled"/>
diff --git a/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml b/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml
index c459211..b8efe0c6 100644
--- a/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml
+++ b/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml
@@ -456,28 +456,6 @@
   </token>
 </histogram>
 
-<histogram name="Conversions.DbVersionOnReportSentAndDeleted" units="Report"
-    expires_after="2026-04-26">
-  <owner>tquintanilla@chromium.org</owner>
-  <owner>measurement-api-dev+metrics@google.com</owner>
-  <summary>
-    Records the DB version every time `AttributionStorageSql::DeleteReport` is
-    invoked, i.e. whenever a report is sent or hits the max number of send
-    attempts and is subsequently deleted. This metric was added starting with DB
-    version 58.
-  </summary>
-</histogram>
-
-<histogram name="Conversions.DbVersionOnSourceStored" units="Source"
-    expires_after="2026-04-26">
-  <owner>tquintanilla@chromium.org</owner>
-  <owner>measurement-api-dev+metrics@google.com</owner>
-  <summary>
-    Records the DB version on every successful source or noised source stored.
-    This metric was added starting with version 56.
-  </summary>
-</histogram>
-
 <histogram
     name="Conversions.DebugReport.HttpResponseOrNetErrorCodeAggregatable"
     enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-02-04">
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml
index 67b4aca..94d3053 100644
--- a/tools/metrics/histograms/metadata/autofill/histograms.xml
+++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -7905,6 +7905,29 @@
 </histogram>
 
 <histogram
+    name="Autofill.TouchToFill.Bnpl.SelectIssuerScreen.NumberOfIssuersShown"
+    units="issuers" expires_after="2026-06-01">
+  <owner>vinnypersky@google.com</owner>
+  <owner>viplavkadam@google.com</owner>
+  <owner>payments-autofill-team@google.com</owner>
+  <summary>
+    Records the number of all BNPL issuers shown in the BNPL issuer selection
+    bottom sheet. Logs when the user is on the issuer selection bottom sheet.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.TouchToFill.Bnpl.SelectIssuerScreen.Shown"
+    enum="BooleanShown" expires_after="2026-06-01">
+  <owner>vinnypersky@google.com</owner>
+  <owner>viplavkadam@google.com</owner>
+  <owner>payments-autofill-team@google.com</owner>
+  <summary>
+    Records the number of times the BNPL issuer selection bottom sheet is shown.
+    Logs true when the BNPL issuer selection bottom sheet is shown.
+  </summary>
+</histogram>
+
+<histogram
     name="Autofill.TouchToFill.Bnpl.SelectIssuerScreen.UnlinkedIssuerSelected"
     enum="BnplIssuerId" expires_after="2026-06-01">
   <owner>vinnypersky@google.com</owner>
@@ -8051,7 +8074,7 @@
 </histogram>
 
 <histogram name="Autofill.TouchToFill.LoyaltyCard.Affiliated.SelectedIndex"
-    units="index" expires_after="2025-12-31">
+    units="index" expires_after="2026-06-01">
   <owner>tchudakov@google.com</owner>
   <owner>osaul@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -8063,7 +8086,7 @@
 </histogram>
 
 <histogram name="Autofill.TouchToFill.LoyaltyCard.All.SelectedIndex"
-    units="index" expires_after="2025-12-31">
+    units="index" expires_after="2026-06-01">
   <owner>tchudakov@google.com</owner>
   <owner>osaul@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -8076,7 +8099,7 @@
 
 <histogram
     name="Autofill.TouchToFill.LoyaltyCard.NumberOfAffiliatedLoyaltyCardsShown"
-    units="loyalty cards" expires_after="2025-12-31">
+    units="loyalty cards" expires_after="2026-06-01">
   <owner>tchudakov@google.com</owner>
   <owner>osaul@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -8087,7 +8110,7 @@
 </histogram>
 
 <histogram name="Autofill.TouchToFill.LoyaltyCard.NumberOfLoyaltyCardsShown"
-    units="loyalty cards" expires_after="2025-12-31">
+    units="loyalty cards" expires_after="2026-06-01">
   <owner>tchudakov@google.com</owner>
   <owner>osaul@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -8100,7 +8123,7 @@
 </histogram>
 
 <histogram name="Autofill.TouchToFill.LoyaltyCard.Outcome"
-    enum="TouchToFill.LoyaltyCard.Outcome" expires_after="2025-12-31">
+    enum="TouchToFill.LoyaltyCard.Outcome" expires_after="2026-06-01">
   <owner>tchudakov@google.com</owner>
   <owner>osaul@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
@@ -8111,7 +8134,7 @@
 </histogram>
 
 <histogram name="Autofill.TouchToFill.LoyaltyCard.TriggerOutcome"
-    enum="TouchToFill.PaymentMethod.TriggerOutcome" expires_after="2025-12-31">
+    enum="TouchToFill.PaymentMethod.TriggerOutcome" expires_after="2026-06-01">
   <owner>tchudakov@google.com</owner>
   <owner>osaul@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml
index a0de256..3547770 100644
--- a/tools/metrics/histograms/metadata/blink/histograms.xml
+++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -2504,7 +2504,7 @@
 </histogram>
 
 <histogram name="Blink.FencedFrame.MaxSameSiteFencedFramesInViewportAtUnload"
-    units="FrameCount" expires_after="2025-12-20">
+    units="FrameCount" expires_after="2026-06-20">
   <owner>averge@chromium.org</owner>
   <owner>shivanisha@chromium.org</owner>
   <owner>chrome-fenced-frames-core@google.com</owner>
@@ -2522,7 +2522,7 @@
 
 <histogram
     name="Blink.FencedFrame.MaxSameSiteFencedFramesInViewportPerPageLoad"
-    units="FrameCount" expires_after="2025-12-20">
+    units="FrameCount" expires_after="2026-06-20">
   <owner>averge@chromium.org</owner>
   <owner>shivanisha@chromium.org</owner>
   <owner>chrome-fenced-frames-core@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml
index bb2be28..7c5a580 100644
--- a/tools/metrics/histograms/metadata/chromeos/histograms.xml
+++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -53,7 +53,7 @@
   </variant>
   <variant name="DiagnosticsUi" summary="CROS Diagnostics Application">
     <owner>byronlee@google.com</owner>
-    <owner>cros-tdm-tpe-eng@google.com</owner>
+    <owner>lt-diagnostics@google.com</owner>
   </variant>
   <variant name="EnterpriseESim" summary="enterprise eSIM">
     <owner>chadduffin@chromium.org</owner>
@@ -1363,9 +1363,9 @@
 
 <histogram
     name="ChromeOS.DiagnosticsUi.Error.CrosHealthdProbeError.{ProbeErrorSourceStruct}"
-    enum="CrosDiagnosticsCrosHealthdProbeError" expires_after="2025-12-31">
+    enum="CrosDiagnosticsCrosHealthdProbeError" expires_after="2026-12-31">
   <owner>byronlee@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the ProbeError::ErrorType returned on request for
     {ProbeErrorSourceStruct}. Recorded on the event a request to cros_healthd
@@ -1380,9 +1380,9 @@
 </histogram>
 
 <histogram name="ChromeOS.DiagnosticsUi.Error.{ErrorSource}"
-    enum="CrosDiagnosticsDataError" expires_after="2025-12-31">
+    enum="CrosDiagnosticsDataError" expires_after="2026-12-31">
   <owner>byronlee@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records error type such as no data error, not a number error and expectation
     not met error when receiving system information including battery info,
@@ -1396,18 +1396,18 @@
 </histogram>
 
 <histogram name="ChromeOS.DiagnosticsUi.InitialScreen"
-    units="CrosDiagnosticsNavigationView" expires_after="2025-12-31">
+    units="CrosDiagnosticsNavigationView" expires_after="2026-12-31">
   <owner>byronlee@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records requested initial screen when opening the Diagnostics App.
   </summary>
 </histogram>
 
 <histogram name="ChromeOS.DiagnosticsUi.KeyboardTesterRoutineDuration"
-    units="ms" expires_after="2026-04-12">
+    units="ms" expires_after="2026-12-31">
   <owner>byronlee@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the duration that the user spent in the Keyboard Tester. Emitted
     when the user closes the keyboard tester.
@@ -1415,9 +1415,9 @@
 </histogram>
 
 <histogram name="ChromeOS.DiagnosticsUi.MemoryRoutineDuration" units="s"
-    expires_after="2026-04-12">
+    expires_after="2026-12-31">
   <owner>byronlee@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the duration that the Memory Routine took to complete. Emitted when
     the routine completes successfully.
@@ -1425,9 +1425,9 @@
 </histogram>
 
 <histogram name="ChromeOS.DiagnosticsUi.OpenDuration" units="ms"
-    expires_after="2026-05-03">
+    expires_after="2026-12-31">
   <owner>byronlee@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the duration that the Diagnostics App is open. emitted when the app
     is closed.
@@ -1435,9 +1435,9 @@
 </histogram>
 
 <histogram name="ChromeOS.DiagnosticsUi.RoutineCount" units="routines"
-    expires_after="2025-12-31">
+    expires_after="2026-12-31">
   <owner>byronlee@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the number of routines run while the Chrome OS Diagnostics App was
     open. Begins at zero each time the app is open and recorded each time the
@@ -1446,9 +1446,9 @@
 </histogram>
 
 <histogram name="ChromeOS.DiagnosticsUi.{NavigationView}.OpenDuration"
-    units="ms" expires_after="2025-12-31">
+    units="ms" expires_after="2026-12-31">
   <owner>byronlee@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the duration that the Diagnostics App is open for a given page view.
     Emitted when the active page changes or when the app is closed. Cumulatively
@@ -1465,9 +1465,9 @@
 </histogram>
 
 <histogram name="ChromeOS.DiagnosticsUi.{RoutineType}Result"
-    enum="CrosDiagnosticsRoutineResult" expires_after="2026-05-03">
+    enum="CrosDiagnosticsRoutineResult" expires_after="2026-12-31">
   <owner>byronlee@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>Records the result of the {RoutineType} Routine.</summary>
   <token key="RoutineType">
     <variant name="BatteryCharge"/>
@@ -1492,7 +1492,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Display.Startup.AmbientLightSensorEnabled"
-    enum="BooleanEnabled" expires_after="2025-12-31">
+    enum="BooleanEnabled" expires_after="2026-12-31">
   <owner>longbowei@google.com</owner>
   <owner>cambickel@google.com</owner>
   <owner>cros-device-enablement@google.com</owner>
@@ -1823,10 +1823,10 @@
 </histogram>
 
 <histogram name="ChromeOS.Healthd.DiagnosticResult.{Routine}"
-    enum="CrosHealthdDiagnosticResult" expires_after="2026-05-03">
+    enum="CrosHealthdDiagnosticResult" expires_after="2026-12-31">
   <owner>weiluanwang@google.com</owner>
   <owner>dennyh@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the diagnostic results from healthd to analyze the usage and the
     pass rate. Emitted when a routine terminates.
@@ -1883,10 +1883,10 @@
 </histogram>
 
 <histogram name="ChromeOS.Healthd.EventSubscription"
-    enum="CrosHealthdEventCategory" expires_after="2025-12-31">
+    enum="CrosHealthdEventCategory" expires_after="2026-12-31">
   <owner>weiluanwang@google.com</owner>
   <owner>dennyh@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the event subscription to healthd to analyze the usage. Emitted when
     the specific category is requested from a client.
@@ -1894,10 +1894,10 @@
 </histogram>
 
 <histogram name="ChromeOS.Healthd.RoutineCreation"
-    enum="CrosHealthdRoutineCategory" expires_after="2026-05-03">
+    enum="CrosHealthdRoutineCategory" expires_after="2026-12-31">
   <owner>weiluanwang@google.com</owner>
   <owner>dennyh@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the routine creation in healthd to analyze the usage. Emitted when
     the specific category is requested from a client.
@@ -1905,10 +1905,10 @@
 </histogram>
 
 <histogram name="ChromeOS.Healthd.TelemetryResult.{Category}"
-    enum="CrosHealthdTelemetryResult" expires_after="2026-03-01">
+    enum="CrosHealthdTelemetryResult" expires_after="2026-12-31">
   <owner>weiluanwang@google.com</owner>
   <owner>dennyh@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the telemetry results from healthd to analyze the usage and error
     rate. Emitted when the specific category is requested from a client.
@@ -1939,9 +1939,9 @@
 </histogram>
 
 <histogram name="ChromeOS.Heartd.Action" enum="HeartdActionType"
-    expires_after="2025-12-31">
-  <owner>kerker@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+    expires_after="2026-12-31">
+  <owner>byronlee@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     Records the action taken by the heartd service. When heartd starts up, we
     check if we reboot the device before, if yes, we send the metrics.
@@ -4673,10 +4673,10 @@
 </histogram>
 
 <histogram name="ChromeOS.TelemetryExtension.RoutineCreation"
-    enum="TelemetryExtensionRoutineCategory" expires_after="2026-04-12">
+    enum="TelemetryExtensionRoutineCategory" expires_after="2026-12-31">
   <owner>weiluanwang@google.com</owner>
   <owner>dennyh@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     The specific routine category created in the Telemetry extension. This is
     emitted every time a routine is created.
@@ -4684,10 +4684,10 @@
 </histogram>
 
 <histogram name="ChromeOS.TelemetryExtension.RoutineSupportedStatusQuery"
-    enum="TelemetryExtensionRoutineCategory" expires_after="2026-03-01">
+    enum="TelemetryExtensionRoutineCategory" expires_after="2026-12-31">
   <owner>weiluanwang@google.com</owner>
   <owner>dennyh@google.com</owner>
-  <owner>cros-tdm-tpe-eng@google.com</owner>
+  <owner>lt-diagnostics@google.com</owner>
   <summary>
     The specific routine category queried in the Telemetry extension. This is
     emitted every time a client queries whether a routine category is supported.
diff --git a/tools/metrics/histograms/metadata/content/histograms.xml b/tools/metrics/histograms/metadata/content/histograms.xml
index c2d7058..76db3507 100644
--- a/tools/metrics/histograms/metadata/content/histograms.xml
+++ b/tools/metrics/histograms/metadata/content/histograms.xml
@@ -431,7 +431,7 @@
 
 <histogram
     name="ContentSettings.RegularProfile.DefaultJavascriptOptimizationBlockedByOs"
-    enum="Boolean" expires_after="2026-01-01">
+    enum="Boolean" expires_after="2026-04-01">
   <owner>pkotwicz@google.com</owner>
   <owner>src/chrome/browser/site_protection/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
index d3023f9..dadacf2 100644
--- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
+++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -691,14 +691,15 @@
 </histogram>
 
 <histogram name="CustomTabs.ParallelRequestStatusOnStart"
-    enum="CustomTabsParallelRequestStatusOnStart" expires_after="M120">
+    enum="CustomTabsParallelRequestStatusOnStart" expires_after="2026-11-01">
   <owner>lizeb@chromium.org</owner>
   <owner>cct-team@google.com</owner>
+  <owner>mthiesse@chromium.org</owner>
   <summary>
     Recorded only on Android. Whether a parallel request was requested by the
     calling application, and if so its initial status. Recorded once per handled
-    intent, when the request is initiated. Starting with M84 this is is also
-    recorded for webapps/WebAPKs. Filter the platform for just CCT/TWA data.
+    intent, when the request is initiated. Filter the platform for just CCT/TWA
+    data. Expired in M120 and brought back in M144.
   </summary>
 </histogram>
 
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
index f7b0987..21103bc2 100644
--- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
+++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -421,8 +421,6 @@
       label="The page was backgrounded at least once from navigation start to
              this event."/>
   <affected-histogram
-      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoad"/>
-  <affected-histogram
       name="PageLoad.Clients.ServiceWorker2.PaintTiming.NavigationToFirstContentfulPaint"/>
   <affected-histogram
       name="PageLoad.Clients.ServiceWorker2.ParseTiming.NavigationToParseStart"/>
@@ -437,15 +435,12 @@
   <affected-histogram
       name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
   <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="PageLoadMetricsAfterPaint" separator=".">
   <suffix name="AfterPaint"
       label="Limited to the duration of time starting after first paint, for
              page loads that reached first paint."/>
-  <affected-histogram
-      name="PageLoad.Clients.FromGoogleSearch.PageTiming.ForegroundDuration"/>
   <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
 </histogram_suffixes>
 
@@ -480,7 +475,6 @@
   <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
   <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
   <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="PageLoadMetricsClientsDocWrite" separator="."
@@ -493,11 +487,6 @@
       name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
   <affected-histogram
       name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
-  <affected-histogram
-      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution"/>
-  <affected-histogram
-      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="PageLoadMetricsClientsFromGoogleSearch" separator="."
@@ -511,10 +500,7 @@
       name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
   <affected-histogram name="PageLoad.InteractiveTiming.FirstInputDelay4"/>
   <affected-histogram
-      name="PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame"/>
-  <affected-histogram
       name="PageLoad.LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms2"/>
-  <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
   <affected-histogram
       name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
   <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
@@ -554,7 +540,6 @@
       name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
   <affected-histogram
       name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="PageLoadMetricsClientsProtocol" separator="."
@@ -588,7 +573,6 @@
       name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
   <affected-histogram
       name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
-  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="PageLoadMetricsClientsScheme" separator="."
@@ -684,8 +668,6 @@
 
 <histogram_suffixes name="PageLoadMetricsNoCommit" separator=".">
   <suffix name="NoCommit" label="Limited to page loads that did not commit."/>
-  <affected-histogram
-      name="PageLoad.Clients.FromGoogleSearch.PageTiming.ForegroundDuration"/>
   <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
 </histogram_suffixes>
 
@@ -695,8 +677,6 @@
              paint."/>
   <suffix name="WithPaint"
       label="The foreground duration for page loads reached first paint."/>
-  <affected-histogram
-      name="PageLoad.Clients.FromGoogleSearch.PageTiming.ForegroundDuration"/>
   <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
 </histogram_suffixes>
 
@@ -838,14 +818,6 @@
   <affected-histogram name="PasswordProtection.Verdict"/>
 </histogram_suffixes>
 
-<histogram_suffixes name="PasswordProtectionTriggerForPasswordFieldOnFocus"
-    separator=".">
-  <suffix name="PasswordFieldOnFocus"
-      label="Password protection triggered by password field on focus event."/>
-  <affected-histogram name="PasswordProtection.RequestOutcome"/>
-  <affected-histogram name="PasswordProtection.Verdict"/>
-</histogram_suffixes>
-
 <histogram_suffixes
     name="PasswordProtectionTriggerForOneTimePasswordFieldDetected"
     separator=".">
@@ -856,6 +828,14 @@
   <affected-histogram name="PasswordProtection.Verdict"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="PasswordProtectionTriggerForPasswordFieldOnFocus"
+    separator=".">
+  <suffix name="PasswordFieldOnFocus"
+      label="Password protection triggered by password field on focus event."/>
+  <affected-histogram name="PasswordProtection.RequestOutcome"/>
+  <affected-histogram name="PasswordProtection.Verdict"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="PasswordProtectionTriggerForSavedPasswordEntry"
     separator=".">
   <suffix name="SavedPasswordEntry"
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml
index 4b8799f0..4421fc5 100644
--- a/tools/metrics/histograms/metadata/others/histograms.xml
+++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -1237,7 +1237,7 @@
 
 <histogram
     name="Ads.InterestGroup.Auction.SameSiteAdComponentsMaxCountForWinningBid"
-    units="NumComponents" expires_after="2025-11-16">
+    units="NumComponents" expires_after="2026-05-16">
   <owner>averge@chromium.org</owner>
   <owner>privacy-sandbox-dev@chromium.org</owner>
   <summary>
@@ -6632,7 +6632,7 @@
 </histogram>
 
 <histogram name="Process.Sandbox.DwriteHookStatus" enum="Boolean"
-    expires_after="2025-11-13">
+    expires_after="2026-11-13">
   <owner>ajgo@chromium.org</owner>
   <owner>wfh@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/page/enums.xml b/tools/metrics/histograms/metadata/page/enums.xml
index 23ba239..f6ca96c 100644
--- a/tools/metrics/histograms/metadata/page/enums.xml
+++ b/tools/metrics/histograms/metadata/page/enums.xml
@@ -309,6 +309,7 @@
   <int value="34" label="Lens Overlay Homework"/>
   <int value="35" label="AI Mode"/>
   <int value="36" label="Reading mode"/>
+  <int value="37" label="Contextual Task"/>
 </enum>
 
 <!-- LINT.ThenChange(//chrome/browser/ui/page_action/page_action_icon_type.h:PageActionIconType) -->
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml
index 50b36886b..2fcc4988 100644
--- a/tools/metrics/histograms/metadata/page/histograms.xml
+++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -468,6 +468,7 @@
   <variant name=".terms"/>
   <variant name=".topics-internals"/>
   <variant name=".translate-internals"/>
+  <variant name=".updater"/>
   <variant name=".urgent-password-expiry-notification"/>
   <variant name=".usb-internals"/>
   <variant name=".vc-background"/>
@@ -910,41 +911,6 @@
   </summary>
 </histogram>
 
-<histogram name="PageLoad.Clients.Ads.Memory.MainFrame.Max" units="KiB"
-    expires_after="2024-11-10">
-  <owner>cammie@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>chrome-ads-histograms@google.com</owner>
-  <summary>
-    The maximum reported number of kilobytes of memory used by V8 by the main
-    frame in this pageload.
-
-    Only recorded if the page has at least one identified ad frame. Recorded in
-    PageLoadMetrics when the page is destroyed. An ad frame consists of the
-    identified ad frame and all of its children (which may also be ads, but are
-    counted as part of the ancestor ad frame).
-
-    Warning: This histogram has incomplete data. It expired in 03/2022 and was
-    unexpired in 11/2023.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Clients.Ads.Memory.UpdateCount" units="count"
-    expires_after="2024-11-10">
-  <owner>cammie@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>chrome-ads-histograms@google.com</owner>
-  <summary>
-    The number of V8 memory measurement updates received by
-    AdsPageLoadMetricsObserver per pageload. Only recorded if the page has at
-    least one identified ad frame. Recorded in PageLoadMetrics when the page is
-    destroyed.
-
-    Warning: This histogram has incomplete data. It expired in 06/2022 and was
-    unexpired in 11/2023.
-  </summary>
-</histogram>
-
 <histogram name="PageLoad.Clients.Ads.Resources.Bytes.Ads2" units="KB"
     expires_after="2026-10-01">
   <owner>jkarlin@chromium.org</owner>
@@ -2643,7 +2609,7 @@
 
 <histogram
     name="PageLoad.Clients.Prerender.LayoutInstability.CumulativeShiftScore{PreloadingTriggerType}"
-    units="ms" expires_after="2026-03-22">
+    units="scorex10" expires_after="2026-03-22">
   <owner>nhiroki@chromium.org</owner>
   <owner>src/content/browser/preloading/prerender/OWNERS</owner>
   <summary>
@@ -2912,18 +2878,6 @@
   </summary>
 </histogram>
 
-<histogram
-    name="PageLoad.Clients.ThirdParty.PaintTiming.NavigationToLargestContentfulPaint.HasThirdPartyFont"
-    units="ms" expires_after="2021-12-31">
-  <owner>shivanisha@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    Records the largest contentful paint only for pages that load a third party
-    font and whose largest contentful resource type is text. See
-    PageLoad.PaintTiming.NavigationToLargestContentfulPaint2 for details.
-  </summary>
-</histogram>
-
 <histogram name="PageLoad.Clients.TPCD.AdTPCAccess.BlockedByExperiment2"
     enum="Boolean" expires_after="2026-03-22">
   <owner>victortan@chromium.org</owner>
@@ -2990,26 +2944,6 @@
   </summary>
 </histogram>
 
-<histogram
-    name="PageLoad.Clients.UseCounter.Experimental.MetricsReplayAtActivationDuration"
-    units="ms" expires_after="2024-02-09">
-  <owner>kenoss@chromium.org</owner>
-  <owner>toyoshim@chromium.org</owner>
-  <summary>
-    The duration of
-    UseCounterPageLoadMetricsObserver::DidActivatePrerenderedPage.
-
-    Recorded iff the page is prerendered and activated. When a page is
-    prerendered, metrics &quot;Blink.UseCounter.*&quot; are buffered into
-    memory. When a page is activated then, buffered metrics are flushed and
-    recorded. This metric records the duration of this flush, in case of this
-    cause a performance degradation.
-
-    Warning: this histogram was expired from 2023-03-16 to 2023-03-2 9and also
-    between 2023-09-03 and M121; data may be missing.
-  </summary>
-</histogram>
-
 <histogram name="PageLoad.Clients.WebView.PageAttemptResults"
     enum="WebViewPageAttemptResult" expires_after="2026-09-30">
   <owner>narms@google.com</owner>
@@ -3392,17 +3326,6 @@
 </histogram>
 
 <histogram
-    name="PageLoad.Experimental.InputTiming.InputToNavigationStart.Background"
-    units="ms" expires_after="2024-02-25">
-  <owner>spelchat@chromium.org</owner>
-  <owner>chrome-brapp-loading@google.com</owner>
-  <summary>
-    The time between the OS-level input event that initiated a navigation, and
-    the navigation actually starting, for background loads.
-  </summary>
-</histogram>
-
-<histogram
     name="PageLoad.Experimental.InputTiming.InputToNavigationStart.FromLinkClick"
     units="ms" expires_after="2026-04-12">
   <owner>spelchat@chromium.org</owner>
@@ -3424,119 +3347,6 @@
   </summary>
 </histogram>
 
-<histogram name="PageLoad.Experimental.Memory.Core.MainFrame.Max" units="KiB"
-    expires_after="2024-11-10">
-  <owner>cammie@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>chrome-ads-histograms@google.com</owner>
-  <summary>
-    The maximum reported number of kilobytes of memory used by V8 by the main
-    frame in this pageload.
-
-    Only recorded if memory tracking is enabled. Recorded in PageLoadMetrics
-    when the page is destroyed.
-
-    Warning: This histogram has incomplete data. It expired in 03/2022 and was
-    unexpired in 11/2023.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.Memory.Core.Subframe.Aggregate.Max"
-    units="KiB" expires_after="2024-11-10">
-  <owner>cammie@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>chrome-ads-histograms@google.com</owner>
-  <summary>
-    The maximum reported aggregate number of kilobytes of memory used by V8 by
-    subframes in this pageload. The value recorded is the maximum simultaneous
-    usage by all subframes during this pageload, not including the main frame.
-
-    Only recorded if memory tracking is enabled. Recorded in PageLoadMetrics
-    when the page is destroyed.
-
-    Warning: This histogram has incomplete data. It expired in 03/2022 and was
-    unexpired in 11/2023.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.Experimental.Memory.Core.Total.Max" units="KiB"
-    expires_after="2024-11-10">
-  <owner>cammie@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>chrome-ads-histograms@google.com</owner>
-  <summary>
-    The maximum reported aggregate number of kilobytes of memory used by V8 by
-    all frames in this pageload. The value recorded is the maximum simultaneous
-    usage by all frames during this pageload, including the main frame.
-
-    Only recorded if memory tracking is enabled. Recorded in PageLoadMetrics
-    when the page is destroyed.
-
-    Warning: This histogram has incomplete data. It expired in 03/2022 and was
-    unexpired in 11/2023.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.NavigationTiming.FinalLoaderCallbackToNavigationCommitSent"
-    units="ms" expires_after="2021-05-08">
-  <owner>nhiroki@chromium.org</owner>
-  <owner>chrome-loading@google.com</owner>
-  <summary>
-    The interval between when a callback for the navigation loader is last
-    invoked and when navigation commit message is sent to a renderer process for
-    the main resource of a main frame navigation.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.NavigationTiming.FinalRequestStartToFinalResponseStart"
-    units="ms" expires_after="2021-05-08">
-  <owner>nhiroki@chromium.org</owner>
-  <owner>chrome-loading@google.com</owner>
-  <summary>
-    The interval between when the final HTTP request is sent and when the
-    headers of the final HTTP response is received for the main resource of a
-    main frame navigation.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.NavigationTiming.FinalResponseStartToFinalLoaderCallback"
-    units="ms" expires_after="2021-05-08">
-  <owner>nhiroki@chromium.org</owner>
-  <owner>chrome-loading@google.com</owner>
-  <summary>
-    The interval between when the headers of the final HTTP response is received
-    and when a callback for the navigation loader is last invoked for the main
-    resource of a main frame navigation.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.NavigationTiming.FirstRequestStartToFirstResponseStart"
-    units="ms" expires_after="2021-05-08">
-  <owner>nhiroki@chromium.org</owner>
-  <owner>chrome-loading@google.com</owner>
-  <summary>
-    The interval between when the first HTTP request is sent and when the
-    headers of the first HTTP response is received for the main resource of a
-    main frame navigation.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.Experimental.NavigationTiming.FirstResponseStartToFirstLoaderCallback"
-    units="ms" expires_after="2021-08-01">
-  <owner>nhiroki@chromium.org</owner>
-  <owner>chrome-loading@google.com</owner>
-  <summary>
-    The interval between when the headers of the first HTTP response is received
-    and when a callback for the navigation loader is first invoked for the main
-    resource of a main frame navigation.
-  </summary>
-</histogram>
-
 <histogram
     name="PageLoad.Experimental.NavigationTiming.NavigationStartToFinalLoaderCallback"
     units="ms" expires_after="2025-05-11">
@@ -3549,19 +3359,6 @@
 </histogram>
 
 <histogram
-    name="PageLoad.Experimental.NavigationTiming.NavigationStartToFinalRequestStart"
-    units="ms" expires_after="2024-09-29">
-  <owner>nhiroki@chromium.org</owner>
-  <owner>chrome-loading@google.com</owner>
-  <summary>
-    The time relative to navigation start that the final HTTP request is sent
-    for the main resource of a main frame navigation.
-
-    This metric has incomplete data. It was expired between 2023-03-12 and M121.
-  </summary>
-</histogram>
-
-<histogram
     name="PageLoad.Experimental.NavigationTiming.NavigationStartToFinalResponseStart"
     units="ms" expires_after="2026-05-17">
   <owner>nhiroki@chromium.org</owner>
@@ -3674,18 +3471,6 @@
   <token key="RequestDestination" variants="RequestDestination"/>
 </histogram>
 
-<histogram
-    name="PageLoad.Experimental.PageTiming.TotalSubresourceLoadTimeAtFirstContentfulPaint"
-    units="ms" expires_after="2024-05-20">
-  <owner>cduvall@chromium.org</owner>
-  <owner>jam@chromium.org</owner>
-  <summary>
-    Measures the aggregate time of subresource requests (from start to when
-    headers have been received) which have been completed before the first
-    contentful paint. Logged for every page load.
-  </summary>
-</histogram>
-
 <histogram name="PageLoad.Experimental.PageVisitFinalStatus"
     enum="PageVisitFinalStatus" expires_after="2026-12-22">
   <owner>sullivan@chromium.org</owner>
@@ -3711,17 +3496,6 @@
   </summary>
 </histogram>
 
-<histogram
-    name="PageLoad.Experimental.PaintTiming.FirstEligibleToPaintToFirstPaint"
-    units="ms" expires_after="2024-07-14">
-  <owner>cduvall@chromium.org</owner>
-  <owner>jam@chromium.org</owner>
-  <summary>
-    Measures the time from when the page is first eligible to paint to when the
-    first paint occurs. Logged for every foreground page load.
-  </summary>
-</histogram>
-
 <histogram name="PageLoad.Experimental.PaintTiming.InputToFirstContentfulPaint"
     units="ms" expires_after="2025-12-04">
   <owner>sullivan@chromium.org</owner>
@@ -4111,16 +3885,6 @@
 </histogram>
 
 <histogram
-    name="PageLoad.Internal.PaintTiming.NavigationToFirstContentfulPaint.InitiatingProcess"
-    enum="ProcessType2" expires_after="2020-09-05">
-  <owner>sullivan@chromium.org</owner>
-  <summary>
-    Breakdown of NavigationToFirstContentfulPaint counts by process that
-    initiated the navigation (this will only be renderer or browser).
-  </summary>
-</histogram>
-
-<histogram
     name="PageLoad.Internal.Prerender2.ActivatedPageLoaderStatus{PreloadingTriggerType}"
     enum="NetErrorCodes" expires_after="2025-09-14">
   <owner>lingqi@chromium.org</owner>
@@ -4361,17 +4125,6 @@
   </summary>
 </histogram>
 
-<histogram name="PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame"
-    units="scorex10" expires_after="2022-10-23">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>skobes@chromium.org</owner>
-  <summary>
-    Measures the cumulative layout shift score (bit.ly/lsm-explainer) that has
-    occurred in the main frame. Recorded at the end of the page lifetime, such
-    as when the page is being navigated away from or when a tab is being closed.
-  </summary>
-</histogram>
-
 <histogram
     name="PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame.AfterBackForwardCacheRestore"
     units="scorex10" expires_after="2022-01-02">
@@ -4493,17 +4246,6 @@
   </summary>
 </histogram>
 
-<histogram
-    name="PageLoad.PageTiming.ForegroundDuration.PageEndReason.ForwardBackNavigation.UserGesture"
-    units="ms" expires_after="M81">
-  <owner>jkarlin@chromium.org</owner>
-  <summary>
-    The time since navigation start before the user presses the back button on a
-    page. Only measures page loads that remained in foreground and were created
-    by user gesture inside the renderer (as opposed to browser UX gestures).
-  </summary>
-</histogram>
-
 <histogram name="PageLoad.PageTiming.NavigationToFirstForeground" units="ms"
     expires_after="2026-05-03">
   <owner>bmcquade@chromium.org</owner>
@@ -4938,44 +4680,6 @@
   </summary>
 </histogram>
 
-<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution" units="ms"
-    expires_after="2024-11-17">
-  <owner>cduvall@chromium.org</owner>
-  <owner>swarm-team@google.com</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the execution of
-    scripts, for main frame documents that finished parsing.
-
-    This histogram has incomplete data. It expired on 2022-02-01 and was
-    re-added on 2022-05-23.
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"
-    units="ms" expires_after="2024-02-09">
-  <owner>cduvall@chromium.org</owner>
-  <owner>swarm-team@google.com</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the execution of
-    scripts inserted from document.write, for main frame documents that finished
-    parsing.
-
-    This histogram has incomplete data. It expired on 2022-02-01 and was
-    re-added on 2022-05-23.
-  </summary>
-</histogram>
-
-<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad" units="ms"
-    expires_after="2024-04-28">
-  <owner>bmcquade@chromium.org</owner>
-  <owner>csharrison@chromium.org</owner>
-  <summary>
-    Measures the time that the HTML parser spent blocked on the load of scripts,
-    for main frame documents that finished parsing.
-  </summary>
-</histogram>
-
 <histogram name="PageLoad.SoftNavigation.CumulativeLayoutShift" units="ms"
     expires_after="2026-05-20">
   <owner>sullivan@chromium.org</owner>
@@ -5097,44 +4801,6 @@
 </histogram>
 
 <histogram
-    name="PageLoad.{AdsPageLoadMetricVisibilityType}.FrameCounts.AdFrames.PerFrame.CreativeOriginStatus"
-    enum="CrossOriginCreativeStatus" expires_after="2021-12-31">
-  <owner>cammie@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>chrome-ads-histograms@google.com</owner>
-  <summary>
-    For each identified ad frame, whether the origin of the ad creative frame
-    matches or differs from the origin of the main frame.
-
-    The ad creative frame is heuristically determined, from among an identified
-    ad frame and all of its children, as the first of these frames to record a
-    First Contentful Paint. If no FCP is recorded, the creative origin status is
-    marked as indeterminate. {AdsPageLoadMetricVisibilityType}
-  </summary>
-</histogram>
-
-<histogram
-    name="PageLoad.{AdsPageLoadMetricVisibilityType}.FrameCounts.AdFrames.PerFrame.CreativeOriginStatusWithThrottling"
-    enum="CrossOriginCreativeStatusWithThrottling" expires_after="2021-12-31">
-  <owner>cammie@chromium.org</owner>
-  <owner>jkarlin@chromium.org</owner>
-  <owner>chrome-ads-histograms@google.com</owner>
-  <summary>
-    For each identified ad frame, whether the origin of the ad creative frame
-    matches or differs from the origin of the main frame, further split by
-    whether the frame has lifecycle updates throttled. Metric is emitted on
-    frame deletion.
-
-    The ad creative frame is heuristically determined, from among an identified
-    ad frame and all of its children, as the first of these frames to record a
-    First Contentful Paint. If no FCP is recorded, the creative origin status is
-    marked as indeterminate. Frames that are render-throttled will not have an
-    FCP. Ad frames with indeterminate creative origin status are broken out as
-    throttled or not. {AdsPageLoadMetricVisibilityType}
-  </summary>
-</histogram>
-
-<histogram
     name="PageLoad.{AdsPageLoadMetricVisibilityType}.FrameCounts.AdFrames.PerFrame.OriginStatus"
     enum="CrossOriginAdStatus" expires_after="2026-05-27">
   <owner>jkarlin@chromium.org</owner>
@@ -5265,13 +4931,6 @@
   </summary>
 </histogram>
 
-<histogram name="PageSerialization.MhtmlLoading.LoadResult"
-    enum="MhtmlLoadResult" expires_after="2023-04-23">
-  <owner>sclittle@chromium.org</owner>
-  <owner>offline-dev@chromium.org</owner>
-  <summary>Reports the result of an attempt to load an MHTML archive.</summary>
-</histogram>
-
 </histograms>
 
 </histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/password/enums.xml b/tools/metrics/histograms/metadata/password/enums.xml
index 20a3bc38..94e7f88 100644
--- a/tools/metrics/histograms/metadata/password/enums.xml
+++ b/tools/metrics/histograms/metadata/password/enums.xml
@@ -326,17 +326,6 @@
 
 <!-- LINT.ThenChange(/chrome/browser/password_manager/password_change_delegate.h) -->
 
-<enum name="CredentialEntryAction">
-  <int value="0" label="Deleted"/>
-  <int value="1" label="Copied username"/>
-  <int value="2" label="Unmasked password"/>
-  <int value="3" label="Masked password"/>
-  <int value="4" label="Copied password"/>
-  <int value="5" label="Edit username and save"/>
-  <int value="6" label="Edit password and save"/>
-  <int value="7" label="Edit username and password and save"/>
-</enum>
-
 <!-- LINT.IfChange(CredentialManagerAndroidGetResult) -->
 
 <enum name="CredentialManagerAndroidGetResult">
@@ -909,13 +898,6 @@
   <int value="5" label="Unsafe state bubble"/>
 </enum>
 
-<enum name="PasswordCheckReferrerAndroid">
-  <int value="0" label="Password Settings"/>
-  <int value="1" label="Safety Check"/>
-  <int value="2" label="Password Breach Dialog"/>
-  <int value="3" label="PhishGuard Dialog"/>
-</enum>
-
 <enum name="PasswordCheckResolutionAction">
   <int value="0" label="Opened a site to change password manually"/>
   <int value="1"
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index 888aeba..4989ac5 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -1048,19 +1048,6 @@
   </summary>
 </histogram>
 
-<histogram name="PasswordManager.BulkCheck.PasswordCheckReferrerAndroid2"
-    enum="PasswordCheckReferrerAndroid" expires_after="2025-11-23">
-  <owner>ioanap@chromium.org</owner>
-  <owner>friedrichh@chromium.org</owner>
-  <summary>
-    Referrer of a navigation to the Password Check UI Settings view. Recorded
-    when the user enters the view. Replaces
-    PasswordManager.BulkCheck.PasswordCheckReferrerAndroid histogram. Fixing the
-    bug that LEAK_DIALOG entry was reported as PHISHED_WARNING_DIALOG with UPM
-    enabled.
-  </summary>
-</histogram>
-
 <histogram name="PasswordManager.BulkCheck.Time" units="ms"
     expires_after="2026-04-26">
   <owner>vasilii@chromium.org</owner>
@@ -1298,21 +1285,6 @@
   </token>
 </histogram>
 
-<histogram name="PasswordManager.CredentialEntryActions.{CredentialEntryType}"
-    enum="CredentialEntryAction" expires_after="2025-11-16">
-  <owner>ioanap@chromium.org</owner>
-  <owner>friedrichh@chromium.org</owner>
-  <summary>
-    Records actions performed by the users in the {CredentialEntryType} view.
-    Android-only for now.
-  </summary>
-  <token key="CredentialEntryType">
-    <variant name="BlockedCredential"/>
-    <variant name="FederatedCredential"/>
-    <variant name="SavedPassword"/>
-  </token>
-</histogram>
-
 <histogram
     name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.APIError"
     enum="PasswordStoreAndroidBackendAPIError" expires_after="2026-05-10">
@@ -1577,17 +1549,6 @@
   </summary>
 </histogram>
 
-<histogram name="PasswordManager.ExportAndroid.MoreThanZeroPasswords"
-    enum="BooleanYesNo" expires_after="2025-12-28">
-  <owner>ioanap@chromium.org</owner>
-  <owner>atsvirchkova@google.com</owner>
-  <summary>
-    Records whether the serializatiation step of the user-initiated password
-    export flow was attempted for more than 0 passwords. Attempting to export 0
-    passwords is considered an error. Android only.
-  </summary>
-</histogram>
-
 <histogram name="PasswordManager.ExportAndroid.WriteToTempFileError"
     enum="PlatformFileError" expires_after="2025-03-30">
   <owner>ioanap@chromium.org</owner>
@@ -1716,7 +1677,7 @@
 </histogram>
 
 <histogram name="PasswordManager.FillSuggestionsGroupedMatchAccepted"
-    enum="Boolean" expires_after="2025-11-16">
+    enum="Boolean" expires_after="2026-05-18">
   <owner>atsvirchkova@google.com</owner>
   <owner>src/components/password_manager/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/puma/histograms.xml b/tools/metrics/histograms/metadata/puma/histograms.xml
index 80d5ca3..4a4c81fa 100644
--- a/tools/metrics/histograms/metadata/puma/histograms.xml
+++ b/tools/metrics/histograms/metadata/puma/histograms.xml
@@ -20,6 +20,60 @@
 
 <histogram-configuration>
 
-<histograms/>
+<histograms>
+
+<!-- LINT.IfChange(PUMA.RegionalCapabilities.FunnelStage.Eligibility) -->
+
+<histogram name="PUMA.RegionalCapabilities.FunnelStage.Eligibility"
+    enum="SearchEngineChoiceScreenConditions" expires_after="2026-08-19">
+  <owner>dgn@chromium.org</owner>
+  <owner>ljjlee@chromium.org</owner>
+  <owner>chrome-regionalcapabilities@google.com</owner>
+  <summary>
+    Records the condition state on profile load for whether the profile is
+    possibly eligible for a search engine choice screen.
+  </summary>
+</histogram>
+
+<!-- LINT.ThenChange(tools/metrics/histograms/metadata/regional_capabilities/histograms.xml:RegionalCapabilities.FunnelStage.Eligibility) -->
+
+<!-- LINT.IfChange(PUMA.RegionalCapabilities.FunnelStage.Reported) -->
+
+<histogram name="PUMA.RegionalCapabilities.FunnelStage.Reported"
+    enum="RegionalCapabilitiesFunnelStage" expires_after="2026-03-22">
+  <owner>dgn@chromium.org</owner>
+  <owner>chrome-regionalcapabilities@google.com</owner>
+  <summary>
+    Reports on which stage of the regional capabilities funnel a given profile
+    is in. (Internal-only: see go/chrome-taiyaki-metrics-dd for more info)
+
+    Can be recorded by profiles on some key events like profile load or attempt
+    to trigger a choice screen.
+  </summary>
+</histogram>
+
+<!-- LINT.ThenChange(tools/metrics/histograms/metadata/regional_capabilities/histograms.xml:RegionalCapabilities.FunnelStage.Reported) -->
+
+<!-- LINT.IfChange(PUMA.RegionalCapabilities.FunnelStage.Triggering) -->
+
+<histogram name="PUMA.RegionalCapabilities.FunnelStage.Triggering"
+    enum="SearchEngineChoiceScreenConditions" expires_after="2026-08-19">
+  <owner>dgn@chromium.org</owner>
+  <owner>ljjlee@chromium.org</owner>
+  <owner>chrome-regionalcapabilities@google.com</owner>
+  <summary>
+    Records the condition state at choice screen triggering attempt, for whether
+    we are determining the profile to be eligible for a search engine choice
+    screen. This is recorded every time the dynamic eligibility state is being
+    checked, which might be as often as every page navigation on desktop, or app
+    warm open on iOS. If a profile was deemed ineligible at profile load time
+    (as recorded by the RegionalCapabilities.FunnelStage.Eligibility histogram),
+    this histogram will not be recorded.
+  </summary>
+</histogram>
+
+<!-- LINT.ThenChange(tools/metrics/histograms/metadata/regional_capabilities/histograms.xml:RegionalCapabilities.FunnelStage.Triggering) -->
+
+</histograms>
 
 </histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml b/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml
index 01ccb86..82ee860 100644
--- a/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml
+++ b/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml
@@ -77,6 +77,8 @@
   </summary>
 </histogram>
 
+<!-- LINT.IfChange(RegionalCapabilities.FunnelStage.Eligibility) -->
+
 <histogram name="RegionalCapabilities.FunnelStage.Eligibility"
     enum="SearchEngineChoiceScreenConditions" expires_after="2026-08-19">
   <owner>dgn@chromium.org</owner>
@@ -88,6 +90,8 @@
   </summary>
 </histogram>
 
+<!-- LINT.ThenChange(tools/metrics/histograms/metadata/puma/histograms.xml:PUMA.RegionalCapabilities.FunnelStage.Eligibility) -->
+
 <histogram name="RegionalCapabilities.FunnelStage.RegionalPresence"
     enum="RegionalProgramAndLocationMatch" expires_after="2026-03-29">
   <owner>dgn@chromium.org</owner>
@@ -103,6 +107,8 @@
   </summary>
 </histogram>
 
+<!-- LINT.IfChange(RegionalCapabilities.FunnelStage.Reported) -->
+
 <histogram name="RegionalCapabilities.FunnelStage.Reported"
     enum="RegionalCapabilitiesFunnelStage" expires_after="2026-03-22">
   <owner>dgn@chromium.org</owner>
@@ -116,6 +122,10 @@
   </summary>
 </histogram>
 
+<!-- LINT.ThenChange(tools/metrics/histograms/metadata/puma/histograms.xml:PUMA.RegionalCapabilities.FunnelStage.Reported) -->
+
+<!-- LINT.IfChange(RegionalCapabilities.FunnelStage.Triggering) -->
+
 <histogram name="RegionalCapabilities.FunnelStage.Triggering"
     enum="SearchEngineChoiceScreenConditions" expires_after="2026-08-19">
   <owner>dgn@chromium.org</owner>
@@ -132,6 +142,8 @@
   </summary>
 </histogram>
 
+<!-- LINT.ThenChange(tools/metrics/histograms/metadata/puma/histograms.xml:PUMA.RegionalCapabilities.FunnelStage.Triggering) -->
+
 <histogram name="RegionalCapabilities.LoadedCountrySource"
     enum="LoadedCapabilitiesCountrySource" expires_after="2026-05-03">
   <owner>dgn@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/stability/histograms.xml b/tools/metrics/histograms/metadata/stability/histograms.xml
index 73449c1..110a69a 100644
--- a/tools/metrics/histograms/metadata/stability/histograms.xml
+++ b/tools/metrics/histograms/metadata/stability/histograms.xml
@@ -501,7 +501,7 @@
 </histogram>
 
 <histogram name="Stability.IOS.PostCrashAction" enum="IOSPostCrashAction"
-    expires_after="2025-12-14">
+    expires_after="2026-12-14">
   <owner>justincohen@chromium.org</owner>
   <owner>bling-fundamentals@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/ui/enums.xml b/tools/metrics/histograms/metadata/ui/enums.xml
index eb67e02..3d853b43 100644
--- a/tools/metrics/histograms/metadata/ui/enums.xml
+++ b/tools/metrics/histograms/metadata/ui/enums.xml
@@ -756,6 +756,7 @@
   <int value="-753390931" label="chrome://interstitials/"/>
   <int value="-734627230" label="chrome://extension-icon/"/>
   <int value="-727952446" label="chrome://nacl/"/>
+  <int value="-722142308" label="chrome://updater/"/>
   <int value="-707542503" label="chrome://choose-mobile-network/"/>
   <int value="-695712248" label="chrome://segmentation-internals/"/>
   <int value="-680649366" label="chrome-untrusted://hats/"/>
diff --git a/tools/perf/benchmarks/blink_perf.py b/tools/perf/benchmarks/blink_perf.py
index 4e1bc29..1698312 100644
--- a/tools/perf/benchmarks/blink_perf.py
+++ b/tools/perf/benchmarks/blink_perf.py
@@ -748,6 +748,7 @@
                 component='Blink>WebGPU',
                 documentation_url='https://bit.ly/blink-perf-benchmarks')
 class BlinkPerfWebGPU(_BlinkPerfBenchmark):
+  # Run the WebGPU perf tests ONLY on core-capable adapters.
   SUBDIR = 'webgpu'
   SUPPORTED_PLATFORMS = [
       story.expectations.WIN_10,
@@ -760,17 +761,16 @@
     return 'blink_perf.webgpu'
 
   def SetExtraBrowserOptionsWithBrowser(self, options, possible_browser):
+    # Make sure WebGPU is enabled if possible, even if not shipped.
+    # The test itself ensures it won't use a fallback (software) backend.
+    options.AppendExtraBrowserArgs(['--enable-unsafe-webgpu'])
+
     if possible_browser.platform.GetOSName() == 'linux':
-      # On Linux, WebGPU is not yet enabled by default, and also needs some
-      # extra flags to make sure Chromium is in the correct mode to run WebGPU.
-      # TODO(442791440): TODO(40218893): Remove flags as they become unneeded.
-      #
-      # Note, we avoid --enable-unsafe-webgpu because we never want to run perf
-      # tests on the SwiftShader CPU-fallback backend (which is disabled without
-      # that flag). If this results in WebGPU being unavailable, these tests
-      # will skip themselves.
+      # Flags to make sure Chromium is in the correct mode to run WebGPU.
+      # TODO(442791440): TODO(40218893): Remove these flags and switch to
+      # testing the backend we get by default. Or, if needed, test both.
       options.AppendExtraBrowserArgs([
-          '--enable-features=WebGPUService,Vulkan,VulkanFromANGLE',
+          '--enable-features=Vulkan,VulkanFromANGLE',
           '--use-angle=vulkan',
           '--ozone-platform=x11',
       ])
@@ -784,9 +784,10 @@
                 component='Blink>WebGPU',
                 documentation_url='https://bit.ly/blink-perf-benchmarks')
 class BlinkPerfWebGPUCompat(_BlinkPerfBenchmark):
+  # Run the WebGPU perf tests ONLY on core-INcapable adapters.
   SUBDIR = 'webgpu'
   # Currently, Android is the only production target platform for WebGPU
-  # Compat's OpenGL ES backend. Enable other Compat platforms as needed.
+  # Compat's core-incapable backend(s). Enable other Compat configs as needed.
   SUPPORTED_PLATFORMS = [story.expectations.ALL_ANDROID]
   # TODO(crbug.com/443111618): Schedule this benchmark.
   SCHEDULED = False
@@ -803,9 +804,13 @@
                                   append_query='compatonly')
 
   def SetExtraBrowserOptionsWithBrowser(self, options, possible_browser):
-    options.AppendExtraBrowserArgs([
-        '--use-webgpu-adapter=opengles',
-    ])
+    # Make sure WebGPU is enabled if possible, even if not shipped.
+    # The test itself ensures it won't use a fallback (software) backend.
+    options.AppendExtraBrowserArgs(['--enable-unsafe-webgpu'])
+
+    # Make sure we're only using the GLES backend. Change this if different
+    # flags are needed on other Core-incapable configs.
+    options.AppendExtraBrowserArgs(['--use-webgpu-adapter=opengles'])
 
 
 @benchmark.Info(emails=[
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 18bc7c9..4a57335 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,8 +5,8 @@
             "full_remote_path": "perfetto-luci-artifacts/v52.0/linux-arm64/trace_processor_shell"
         },
         "win": {
-            "hash": "a194f31b9f2c23b1f6b10d368965649ac8c2c95c",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/4fbe260dafe8fbb7a2e4c6abb2dd3a49f51aee80/trace_processor_shell.exe"
+            "hash": "c22875531e9ddd8e0d055294ce52b0a628e507f8",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/10ac9fc0b09895e39f29d6ef444d496c510856d1/trace_processor_shell.exe"
         },
         "linux_arm": {
             "hash": "46d798c1864490cbb2ee053d6eda436184470e69",
@@ -21,8 +21,8 @@
             "full_remote_path": "perfetto-luci-artifacts/ebf44e57a3b734c5281bdff53d9945805486004e/mac-arm64/trace_processor_shell"
         },
         "linux": {
-            "hash": "e5c10ff0729851f2c6a24d4d8db55f53f60441d8",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/74a696c4e77ac97222b057ab1c2a0c520a136a92/trace_processor_shell"
+            "hash": "40aeb03c20cf5d7384c60ef53c9e6817a3458b2b",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/60767b0bac8bea553a5cb85a5a79a0a36ee52547/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/ui/accelerated_widget_mac/ca_transaction_observer.mm b/ui/accelerated_widget_mac/ca_transaction_observer.mm
index 6fdf272c..e6cd27e 100644
--- a/ui/accelerated_widget_mac/ca_transaction_observer.mm
+++ b/ui/accelerated_widget_mac/ca_transaction_observer.mm
@@ -29,7 +29,8 @@
 namespace ui {
 
 namespace {
-NSString* kRunLoopMode = @"Chrome CATransactionCoordinator commit handler";
+NSString* const kRunLoopMode =
+    @"Chrome CATransactionCoordinator commit handler";
 constexpr auto kPostCommitTimeout = base::Milliseconds(50);
 }  // namespace
 
diff --git a/ui/accessibility/ax_enum_localization_util.cc b/ui/accessibility/ax_enum_localization_util.cc
index 7c41c5c..1036d0f 100644
--- a/ui/accessibility/ax_enum_localization_util.cc
+++ b/ui/accessibility/ax_enum_localization_util.cc
@@ -32,6 +32,9 @@
       return l10n_util::GetStringUTF8(IDS_AX_SELECT_ACTION_VERB);
     case ax::mojom::DefaultActionVerb::kUncheck:
       return l10n_util::GetStringUTF8(IDS_AX_UNCHECK_ACTION_VERB);
+    case ax::mojom::DefaultActionVerb::kClickInHitTest:
+    case ax::mojom::DefaultActionVerb::kClickNotInHitTest:
+      NOTREACHED();
   }
 
   return "";
diff --git a/ui/accessibility/ax_enum_util.cc b/ui/accessibility/ax_enum_util.cc
index f372791..b31e29e 100644
--- a/ui/accessibility/ax_enum_util.cc
+++ b/ui/accessibility/ax_enum_util.cc
@@ -1182,6 +1182,8 @@
       return "suspendMedia";
     case ax::mojom::Action::kLongClick:
       return "longClick";
+    case ax::mojom::Action::kRequestLayoutBasedAction:
+      return "requestLayoutBasedAction";
   }
 
   return "";
@@ -1243,6 +1245,10 @@
       return "select";
     case ax::mojom::DefaultActionVerb::kUncheck:
       return "uncheck";
+    case ax::mojom::DefaultActionVerb::kClickInHitTest:
+      return "clickInHitTest";
+    case ax::mojom::DefaultActionVerb::kClickNotInHitTest:
+      return "clickNotInHitTest";
   }
 
   return "";
diff --git a/ui/accessibility/ax_enums.mojom b/ui/accessibility/ax_enums.mojom
index cea40f06..422fd19f1 100644
--- a/ui/accessibility/ax_enums.mojom
+++ b/ui/accessibility/ax_enums.mojom
@@ -400,8 +400,8 @@
 // An action to be taken on an accessibility node.
 // In contrast to |AXDefaultActionVerb|, these describe what happens to the
 // object, e.g. "FOCUS".
-// Next version: 5
-// Next value: 41
+// Next version: 6
+// Next value: 42
 [Extensible, Stable, Uuid="ed8e4466-0522-4f98-ac28-59a523b70232"]
 enum Action {
   [Default]kNone = 0,
@@ -464,7 +464,7 @@
   // Delete any selected text in the control's text value and
   // insert |AXActionData::value| in its place, like when typing or pasting.
   kReplaceSelectedText = 17,
-
+  [MinVersion=5] kRequestLayoutBasedAction = 41,
   [MinVersion=1] kResumeMedia = 34,
 
   // Scrolls by approximately one screen in a specific direction. Should be
@@ -572,6 +572,12 @@
   // as it bubbles up.
   kClickAncestor,
 
+  // A click on this node will result in event dispatch to this node.
+  kClickInHitTest,
+
+  // A click on this node will not result in event dispatch to this node.
+  kClickNotInHitTest,
+
   kJump,
   kOpen,
   kPress,
diff --git a/ui/accessibility/ax_event_generator.cc b/ui/accessibility/ax_event_generator.cc
index a7996deb..d823830 100644
--- a/ui/accessibility/ax_event_generator.cc
+++ b/ui/accessibility/ax_event_generator.cc
@@ -666,6 +666,9 @@
         AddEvent(node, Event::OBJECT_ATTRIBUTE_CHANGED);
       }
       break;
+    case ax::mojom::IntAttribute::kDefaultActionVerb:
+      AddEvent(node, Event::DEFAULT_ACTION_VERB_CHANGED);
+      break;
     default:
       break;
   }
@@ -1325,6 +1328,8 @@
       return "collapsed";
     case AXEventGenerator::Event::CONTROLS_CHANGED:
       return "controlsChanged";
+    case AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED:
+      return "defaultActionVerbChanged";
     case AXEventGenerator::Event::DETAILS_CHANGED:
       return "detailsChanged";
     case AXEventGenerator::Event::DESCRIBED_BY_CHANGED:
diff --git a/ui/accessibility/ax_event_generator.h b/ui/accessibility/ax_event_generator.h
index 9ec4a07f..af9faf6 100644
--- a/ui/accessibility/ax_event_generator.h
+++ b/ui/accessibility/ax_event_generator.h
@@ -51,6 +51,7 @@
     CHILDREN_CHANGED,
     COLLAPSED,
     CONTROLS_CHANGED,
+    DEFAULT_ACTION_VERB_CHANGED,
     DETAILS_CHANGED,
     DESCRIBED_BY_CHANGED,
     DESCRIPTION_CHANGED,
diff --git a/ui/accessibility/ax_node_data.cc b/ui/accessibility/ax_node_data.cc
index a58126b8..edf6f1b 100644
--- a/ui/accessibility/ax_node_data.cc
+++ b/ui/accessibility/ax_node_data.cc
@@ -689,6 +689,7 @@
     case ax::mojom::Action::kStopDuckingMedia:
     case ax::mojom::Action::kSuspendMedia:
     case ax::mojom::Action::kLongClick:
+    case ax::mojom::Action::kRequestLayoutBasedAction:
       break;
   }
 
diff --git a/ui/accessibility/platform/automation/automation_api_util.cc b/ui/accessibility/platform/automation/automation_api_util.cc
index 8bc5824..6883c0e4 100644
--- a/ui/accessibility/platform/automation/automation_api_util.cc
+++ b/ui/accessibility/platform/automation/automation_api_util.cc
@@ -114,6 +114,7 @@
     case AXEventGenerator::Event::CHILDREN_CHANGED:
     case AXEventGenerator::Event::COLLAPSED:
     case AXEventGenerator::Event::CONTROLS_CHANGED:
+    case AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED:
     case AXEventGenerator::Event::DETAILS_CHANGED:
     case AXEventGenerator::Event::DESCRIBED_BY_CHANGED:
     case AXEventGenerator::Event::DESCRIPTION_CHANGED:
diff --git a/ui/accessibility/platform/browser_accessibility_manager_auralinux.cc b/ui/accessibility/platform/browser_accessibility_manager_auralinux.cc
index 60a2ec2c..8145a781 100644
--- a/ui/accessibility/platform/browser_accessibility_manager_auralinux.cc
+++ b/ui/accessibility/platform/browser_accessibility_manager_auralinux.cc
@@ -366,6 +366,7 @@
     case AXEventGenerator::Event::CHECKED_STATE_DESCRIPTION_CHANGED:
     case AXEventGenerator::Event::CHILDREN_CHANGED:
     case AXEventGenerator::Event::CONTROLS_CHANGED:
+    case AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED:
     case AXEventGenerator::Event::DETAILS_CHANGED:
     case AXEventGenerator::Event::DESCRIBED_BY_CHANGED:
     case AXEventGenerator::Event::EDITABLE_TEXT_CHANGED:
diff --git a/ui/accessibility/platform/browser_accessibility_manager_mac.mm b/ui/accessibility/platform/browser_accessibility_manager_mac.mm
index 3e6426f..27c442d 100644
--- a/ui/accessibility/platform/browser_accessibility_manager_mac.mm
+++ b/ui/accessibility/platform/browser_accessibility_manager_mac.mm
@@ -385,6 +385,7 @@
     case AXEventGenerator::Event::CARET_BOUNDS_CHANGED:
     case AXEventGenerator::Event::CHECKED_STATE_DESCRIPTION_CHANGED:
     case AXEventGenerator::Event::CONTROLS_CHANGED:
+    case AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED:
     case AXEventGenerator::Event::DETAILS_CHANGED:
     case AXEventGenerator::Event::DESCRIBED_BY_CHANGED:
     case AXEventGenerator::Event::DESCRIPTION_CHANGED:
diff --git a/ui/accessibility/platform/browser_accessibility_manager_win.cc b/ui/accessibility/platform/browser_accessibility_manager_win.cc
index 307d044..9699452 100644
--- a/ui/accessibility/platform/browser_accessibility_manager_win.cc
+++ b/ui/accessibility/platform/browser_accessibility_manager_win.cc
@@ -610,6 +610,7 @@
     case AXEventGenerator::Event::AUTOFILL_AVAILABILITY_CHANGED:
     case AXEventGenerator::Event::CARET_BOUNDS_CHANGED:
     case AXEventGenerator::Event::CHECKED_STATE_DESCRIPTION_CHANGED:
+    case AXEventGenerator::Event::DEFAULT_ACTION_VERB_CHANGED:
     case AXEventGenerator::Event::DETAILS_CHANGED:
     case AXEventGenerator::Event::DOCUMENT_TITLE_CHANGED:
     case AXEventGenerator::Event::FOCUS_CHANGED:
diff --git a/ui/compositor_extra/shadow.h b/ui/compositor_extra/shadow.h
index 9d32872f..f40b0b5 100644
--- a/ui/compositor_extra/shadow.h
+++ b/ui/compositor_extra/shadow.h
@@ -8,13 +8,13 @@
 #include <memory>
 
 #include "base/memory/raw_ptr.h"
+#include "ui/compositor/layer.h"
 #include "ui/compositor/layer_animation_observer.h"
 #include "ui/compositor/layer_owner.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/shadow_util.h"
 
 namespace ui {
-class Layer;
 
 // Simple class that draws a drop shadow around content at given bounds.
 class Shadow : public ui::ImplicitAnimationObserver, public ui::LayerOwner {
diff --git a/ui/ozone/demo/ozone_demo.cc b/ui/ozone/demo/ozone_demo.cc
index de43449..bd44b707 100644
--- a/ui/ozone/demo/ozone_demo.cc
+++ b/ui/ozone/demo/ozone_demo.cc
@@ -10,6 +10,7 @@
 #include "base/debug/stack_trace.h"
 #include "base/functional/callback_helpers.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_executor.h"
diff --git a/ui/ozone/demo/skia/skia_demo.cc b/ui/ozone/demo/skia/skia_demo.cc
index 16f75f3..880f0744 100644
--- a/ui/ozone/demo/skia/skia_demo.cc
+++ b/ui/ozone/demo/skia/skia_demo.cc
@@ -10,6 +10,7 @@
 #include "base/debug/stack_trace.h"
 #include "base/functional/callback_helpers.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_executor.h"
diff --git a/ui/views_content_client/views_content_main_delegate.cc b/ui/views_content_client/views_content_main_delegate.cc
index 77ffabc..63651ac 100644
--- a/ui/views_content_client/views_content_main_delegate.cc
+++ b/ui/views_content_client/views_content_main_delegate.cc
@@ -9,6 +9,7 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/path_service.h"
 #include "build/build_config.h"
 #include "content/public/common/content_switches.h"
diff --git a/ui/webui/examples/app/main_delegate.cc b/ui/webui/examples/app/main_delegate.cc
index 305b9829..f598f93 100644
--- a/ui/webui/examples/app/main_delegate.cc
+++ b/ui/webui/examples/app/main_delegate.cc
@@ -7,6 +7,7 @@
 #include "base/check.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/logging/logging_settings.h"
 #include "base/path_service.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/webui/examples/browser/content_browser_client.h"
diff --git a/ui/webui/resources/cr_components/composebox/composebox.css b/ui/webui/resources/cr_components/composebox/composebox.css
index 35d512d5..65f18e6 100644
--- a/ui/webui/resources/cr_components/composebox/composebox.css
+++ b/ui/webui/resources/cr_components/composebox/composebox.css
@@ -486,7 +486,7 @@
 }
 
 #suggestionActivity {
-  bottom: var(--cr-composebox-suggestion-activity-bottom, 0);
+  bottom: var(--cr-composebox-suggestion-activity-bottom);
   color: var(--color-composebox-suggestion-activity);
   font-size: 12px;
   font-weight: 400;
diff --git a/ui/webui/resources/cr_components/history_embeddings/history_embeddings.ts b/ui/webui/resources/cr_components/history_embeddings/history_embeddings.ts
index f42dd4d..5f91d149f 100644
--- a/ui/webui/resources/cr_components/history_embeddings/history_embeddings.ts
+++ b/ui/webui/resources/cr_components/history_embeddings/history_embeddings.ts
@@ -6,6 +6,7 @@
 import '//resources/cr_elements/cr_action_menu/cr_action_menu.js';
 import '//resources/cr_elements/cr_feedback_buttons/cr_feedback_buttons.js';
 import '//resources/cr_elements/cr_icon/cr_icon.js';
+import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import '//resources/cr_elements/cr_loading_gradient/cr_loading_gradient.js';
 import '//resources/cr_elements/cr_url_list_item/cr_url_list_item.js';
 import './icons.html.js';
diff --git a/ui/webui/resources/cr_components/most_visited/most_visited.ts b/ui/webui/resources/cr_components/most_visited/most_visited.ts
index 6fdedfc..23f8a3d8 100644
--- a/ui/webui/resources/cr_components/most_visited/most_visited.ts
+++ b/ui/webui/resources/cr_components/most_visited/most_visited.ts
@@ -5,6 +5,7 @@
 import '//resources/cr_elements/cr_action_menu/cr_action_menu.js';
 import '//resources/cr_elements/cr_button/cr_button.js';
 import '//resources/cr_elements/cr_dialog/cr_dialog.js';
+import '//resources/cr_elements/cr_icon/cr_icon.js';
 import '//resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import '//resources/cr_elements/cr_input/cr_input.js';
 import '//resources/cr_elements/cr_toast/cr_toast_manager.js';
diff --git a/ui/webui/resources/cr_components/search/animated_glow.css b/ui/webui/resources/cr_components/search/animated_glow.css
index 68f69bb..141d742f 100644
--- a/ui/webui/resources/cr_components/search/animated_glow.css
+++ b/ui/webui/resources/cr_components/search/animated_glow.css
@@ -23,7 +23,8 @@
   /* All gradient rotation and background blur/border shrinking needs to be at
    * interval, otherwise border-radius due to border width
    * may not be at right size at right time. */
-  --glif-rotation-duration_: var(--search-animated-glif-rotation-duration, 1000ms);
+  --glif-rotation-duration_: var(--search-animated-glif-rotation-duration,
+      2000ms);
 
   --glow-stroke-width_: 2px;
 
@@ -100,11 +101,12 @@
   /*
   * The actual gradient border and inner glow. In
   * its raw form without .background's effects, it's a
-  * colored pinwheel box. 2 gradients so the effect is brighter,
+  * colored pinwheel circle. 2 gradients so the effect is brighter,
   * but only for dragging animation (not needed for others).
   */
-  aspect-ratio: 1 / 1;
+  aspect-ratio: 1 / 1; /* Square shape. */
   background: var(--search-animated-glow-brand-gradient);
+  /* 50% == circle, so it looks like it isn't moving when rotating. */
   border-radius: 50%;
   contain: paint;
   content: '';
@@ -116,15 +118,27 @@
   /*
   * Scale squashes the gradient vertically so its middle is not shown,
   * making it a glow, not a pinwheel. Too much, and it will be too
-  * tall of a glow. */
+  * tall of a glow.
+  */
   scale: 1 0.6;
   top: 50%;
   translate: -50% -50%;
   /*
-  * The gradient is 120% wide to ensure it fills
-  * passed the entire container.
+   * Hypotenuse rule - for rotating circle to be as wide as composebox
+   * (which is a rectangle) is at all points, its width and height must
+   *  be >= diagonal of composebox. Thus, use width of 145%
+   * (height set by aspect ratio) since sqrt(2) = ~141%.
+   * Take triangle half of rectangle composebox to find diagonal:
+   * a^2 + b^2 = c^2 -> c = sqrt(a^2 + b^2). Let x be max(a,b) via cqmax.
+   * sqrt(2x^2) -> 141% of max of container (x). Chose 145% for slight buffer.
+   * Take max of either height or width of parent (outer box). In this case,
+   * it must be width given all searchboxes are wider than tall. Therefore, let
+   * x = parent width in this case. Could try to use cqMax, but will fail debug
+   * check due to asking for element attributes that do not exist yet.
+   * ***IMPORTANT***: Swap height and width definitions in this class
+   * if your height is bigger than width in the searchbox.
   */
-  width: 120%;
+  width: 145%;
 }
 
 :host([entrypoint-name='Omnibox'][animation-state='expanding']) .double-gradient::before,
diff --git a/ui/webui/resources/cr_components/search/audio_wave.css b/ui/webui/resources/cr_components/search/audio_wave.css
index aca966d..914bf4b5 100644
--- a/ui/webui/resources/cr_components/search/audio_wave.css
+++ b/ui/webui/resources/cr_components/search/audio_wave.css
@@ -15,8 +15,9 @@
 }
 
 .eclipse-svg-wrapper {
-  position: absolute;
+  height: 55px;
   inset: 0;
+  position: absolute;
   /* So it doesn't render on top of the text input. */
   z-index: 0;
 }
diff --git a/ui/webui/resources/cr_components/search/audio_wave.ts b/ui/webui/resources/cr_components/search/audio_wave.ts
index 80e94d8..314b9d6 100644
--- a/ui/webui/resources/cr_components/search/audio_wave.ts
+++ b/ui/webui/resources/cr_components/search/audio_wave.ts
@@ -16,7 +16,7 @@
 
 // Wave height
 const MAX_AMPLITUDE: number = -25;
-const MIN_AMPLITUDE: number = 0;
+const MIN_AMPLITUDE: number = -0;
 
 // Vertical offset
 const MAX_VERTICAL_SHIFT: number = -10;
@@ -57,6 +57,7 @@
 export interface AudioWaveElement {
   $: {
     'eclipse-svg-wrapper': HTMLElement,
+    'eclipse-svg': SVGElement,
     'mask': SVGMaskElement,
     'thin-path': SVGPathElement,
     'lower-glow-path': SVGPathElement,
@@ -97,6 +98,7 @@
   private thinPathEl?: SVGPathElement;
   private lowerGlowPathEl?: SVGPathElement;
   private clipPathEl?: SVGPathElement;
+  private eclipseSvgEl?: SVGElement;
 
   private containerWidth: number = 0;
   private animationFrameId: number|null = null;
@@ -105,12 +107,26 @@
   private frame: number = 0;
   private lastUpdateTime: number = performance.now();
 
+  /* Observe width changes per element with a recent size change. */
+  private resizeObserver: ResizeObserver = new ResizeObserver((entries) => {
+    for (const entry of entries) {
+      this.containerWidth = entry.contentRect.width;
+    }
+  });
+
+  override connectedCallback() {
+    super.connectedCallback();
+    if (this.eclipseSvgEl) {
+      this.resizeObserver.observe(this.eclipseSvgEl);
+    }
+  }
   override firstUpdated() {
     this.eclipseSvgWrapperEl = this.$['eclipse-svg-wrapper'];
     this.maskEl = this.$['mask'];
     this.thinPathEl = this.$['thin-path'];
     this.lowerGlowPathEl = this.$['lower-glow-path'];
     this.clipPathEl = this.$['clip-path-shape'];
+    this.eclipseSvgEl = this.$['eclipse-svg'];
   }
 
   override updated(changedProperties: PropertyValues<this>) {
@@ -123,6 +139,7 @@
   override disconnectedCallback() {
     super.disconnectedCallback();
     this.onStopListen();
+    this.resizeObserver.disconnect();
   }
 
   protected onStartListen() {
@@ -130,13 +147,12 @@
       return;
     }
 
-    this.containerWidth = this.eclipseSvgWrapperEl.offsetWidth;
-
     this.isExpanding_ = true;
 
     // If animation has not started; start it.
     if (this.animationFrameId === null) {
-      this.processFrame();
+      // Add to queue instead of adding to call stack; (now CPU efficient).
+      this.animationFrameId = requestAnimationFrame(this.processFrame);
     }
   }
 
@@ -286,10 +302,13 @@
     // Glow:
     this.lowerGlowPathEl.setAttribute(
         'd', buildBezierPath(STROKE_WIDTH, false));
+    const currentTransform = `translate(0, ${maskTranslateY})`;
+    this.maskEl.setAttribute('transform', currentTransform);
+    this.thinPathEl.setAttribute('transform', currentTransform);
+    this.lowerGlowPathEl.setAttribute('transform', currentTransform);
+    this.clipPathEl.setAttribute('transform', currentTransform);
 
-    this.maskEl.setAttribute('transform', `translate(0, ${maskTranslateY})`);
-
-    // Should be bigger than parent height
+    // Should be >= wrapper height.
     const bottomClipY = 1000;
     const topControlY = STROKE_WIDTH * -0.5 + controlPointY;
 
diff --git a/ui/webui/resources/tools/eslint_ts_test.py b/ui/webui/resources/tools/eslint_ts_test.py
index afc80240..1da520e 100755
--- a/ui/webui/resources/tools/eslint_ts_test.py
+++ b/ui/webui/resources/tools/eslint_ts_test.py
@@ -148,6 +148,11 @@
         _EXPECTED_ERROR % {
             'tagName': 'some-other-button'
         },
+        # Imported via iron-list.js (testing special case for
+        # third_party/polymer elements/ which use "-" instead of "_".
+        _EXPECTED_ERROR % {
+            'tagName': 'iron-list'
+        },
     ]
     for e in non_errors:
       self.assertFalse(e in str(context.exception))
diff --git a/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.html.ts b/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.html.ts
index 4bfe86b..a3b7f8db 100644
--- a/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.html.ts
+++ b/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.html.ts
@@ -14,5 +14,6 @@
     id="button2"></other-button2>
 <cr-expand-button></cr-expand-button>
 <some-other-button id="button3"></some-other-button>
+<iron-list></iron-list>
 `;
 }
diff --git a/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.ts b/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.ts
index 9109ace5..ef42d086 100644
--- a/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.ts
+++ b/ui/webui/resources/tools/tests/eslint_ts/with_webui_plugin_web_component_missing_deps_violations.ts
@@ -5,6 +5,7 @@
 // Test file for @webui-eslint/web-component-missing-deps
 
 import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.js';
+import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
 import './other_button.js';
 
 import {CrLitElement} from '//resources/lit/v3_0/lit.rollup.js';
diff --git a/ui/webui/resources/tools/webui_eslint_plugin.js b/ui/webui/resources/tools/webui_eslint_plugin.js
index c2f5d27..fc1acc4a 100644
--- a/ui/webui/resources/tools/webui_eslint_plugin.js
+++ b/ui/webui/resources/tools/webui_eslint_plugin.js
@@ -298,6 +298,9 @@
       const filenames = new Set();
       for (let i = 0; i < parts.length; i++) {
         filenames.add(parts.slice(i).join('_') + '.js');
+        if (tagName === 'iron-list') {
+          filenames.add(parts.slice(i).join('-') + '.js');
+        }
       }
 
       return filenames;
diff --git a/v8 b/v8
index 998bb7f..a4e571c9d 160000
--- a/v8
+++ b/v8
@@ -1 +1 @@
-Subproject commit 998bb7fdf2099be82eb98522c3170e2039c2c46a
+Subproject commit a4e571c9d0bfe4001e9ef4378c5271fb4b1f1ab8